分享

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

ighack 2020-5-15 15:57:41 发表于 疑问解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 5890
[mw_shl_code=xml,true]<dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka_2.11</artifactId>
        <version>1.10.0</version>
    </dependency>[/mw_shl_code]
我使用的是kafka通用版的connector
这个版本只有两个FlinkKafkaProducer构造函数可用,其他的都已经deprecated
并且这两个构造函数都没有指定FlinkKafkaPartitioner的参数
我想知道现在怎样才能保证可以均匀的发送到kafka的所有分区里
最好是在我扩容的时候不需要重启flink

已有(3)人评论

跳转到指定楼层
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/f ... fka-consumer-topic-和分区发现
回复

使用道具 举报

ighack 发表于 2020-5-25 09:40:21
现在FlinkKafkaProducer的实例化的方法没有地方可以传FlinkFixedPartitioner
可以传FlinkFixedPartitioner的方法都已经deprecated
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条