更新时间:2024-11-21 GMT+08:00
分享

FlinkSQL Kafka表开发建议

Kafka作为source表时应设置限流

本章节适用于MRS 3.3.0及以后版本。

防止上限超过流量峰值,导致作业异常带来不稳定因素。因此建议设置限流,限流上限应该为业务上线压测的峰值。

【示例】

#如下参数作用在每个并行度
'scan.records-per-second.limit' = '1000'
#真实的限流流量如下
min( parallelism * scan.records-per-second.limit,partitions num * scan.records-per-second.limit)

为保证数据准确性将同key数据写入Kafka的同一个分区

Flink写Kafka使用fixed策略,并在写入之前根据key进行Hash。

【示例】

CREATE TABLE kafka (
 f_sequence INT,
 f_sequence1 INT,
 f_sequence2 INT,
 f_sequence3 INT 
 ) WITH ( 
 'connector' = 'kafka',
 'topic' = 'yxtest123',
 'properties.bootstrap.servers' = '192.168.0.104:9092',
 'properties.group.id' = 'testGroup1',
 'scan.startup.mode' = 'latest-offset',
 'format' = 'json',
 'sink.partitioner'='fixed'
 ); 

 insert into kafka select /*+ DISTRIBUTEBY('f_sequence','f_sequence1') */ * from datagen;

为提升Kafka消费速度可将Kafka Source并行度与Topic分区数保持一致

当Kafka Source并行度大于Topic分区数时,多余的并行度不能消费数据。

相关文档