ighack 发表于 2020-5-15 15:57:41

关于flink1.10中kafka写入的问题

<dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-connector-kafka_2.11</artifactId>
      <version>1.10.0</version>
    </dependency>
我使用的是kafka通用版的connector
这个版本只有两个FlinkKafkaProducer构造函数可用,其他的都已经deprecated
并且这两个构造函数都没有指定FlinkKafkaPartitioner的参数
我想知道现在怎样才能保证可以均匀的发送到kafka的所有分区里
最好是在我扩容的时候不需要重启flink

langke93 发表于 2020-5-17 17:10:58

可以使用自定义分区
更多参考信息:
默认情况下,如果没有为 Flink Kafka Producer 指定自定义分区程序,则 producer 将使用 FlinkFixedPartitioner 为每个 Flink Kafka Producer 并行子任务映射到单个 Kafka 分区(即,接收子任务接收到的所有消息都将位于同一个 Kafka 分区中)。

可以通过扩展 FlinkKafkaPartitioner 类来实现自定义分区程序。所有 Kafka 版本的构造函数都允许在实例化 producer 时提供自定义分区程序。 注意:分区器实现必须是可序列化的,因为它们将在 Flink 节点之间传输。此外,请记住分区器中的任何状态都将在作业失败时丢失,因为分区器不是 producer 的 checkpoint 状态的一部分。

也可以完全避免使用分区器,并简单地让 Kafka 通过其附加 key 写入的消息进行分区(使用提供的序列化 schema 为每条记录确定分区)。 为此,在实例化 producer 时提供 null 自定义分区程序,提供 null 作为自定义分区器是很重要的; 如上所述,如果未指定自定义分区程序,则默认使用 FlinkFixedPartitioner。


可参考
https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/connectors/kafka.html#kafka-consumer-topic-和分区发现

美丽天空 发表于 2020-5-18 10:37:57

来学习了

ighack 发表于 2020-5-25 09:40:21

现在FlinkKafkaProducer的实例化的方法没有地方可以传FlinkFixedPartitioner
可以传FlinkFixedPartitioner的方法都已经deprecated
页: [1]
查看完整版本: 关于flink1.10中kafka写入的问题