主页 > 电脑硬件  > 

Flinkkafka数据汇不指定分区器导致的问题

Flinkkafka数据汇不指定分区器导致的问题
背景

在flink中,我们经常使用kafka作为flink的数据汇,也就是目标数据的存储地,然而当我们使用FlinkKafkaProducer作为数据汇连接器时,我们需要注意一些注意事项,本文就来记录一下

使用kafka数据汇连接器

首先我们看一下常用的使用的情况:

public FlinkKafkaProducer( String topicId, SerializationSchema<IN> serializationSchema, Properties producerConfig) { this( topicId, serializationSchema, producerConfig, //不指定分区器时,kafka默认使用FlinkFixedPartitioner分区器 Optional.of(new FlinkFixedPartitioner<>())); }

可以看到在不指定分区器时,kafka默认使用FlinkFixedPartitioner作为分区器,我们查看一下FlinkFixedPartitioner的分区逻辑:

public int partition(T record, byte[] key, byte[] value, String targetTopic, int[] partitions) { Preconditions.checkArgument( partitions != null && partitions.length > 0, "Partitions of the target topic is empty."); // 根据算子的任务索引号进行求余 return partitions[parallelInstanceId % partitions.length]; }

可以看到,同一个算子任务的记录都只会发送到同一个kafka分区上,当分区数大于算子任务数时,可以确定的是有一些分区是没有记录的,那你可能会问,有些分区没有记录有什么问题?

标签:

Flinkkafka数据汇不指定分区器导致的问题由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Flinkkafka数据汇不指定分区器导致的问题