apache-flink - FlinkKafkaProducer 的 ProducerConfig 具有一次性语义

标签 apache-flink flink-streaming

使用 Kafka API 创建具有一次性语义的 Kafka 生产者时,必须设置两个属性:transactional.id 必须设置为事务 id,以及 enable。幂等性必须设置为true。

在 Apache Flink 中,FlinkKafkaProducer 可以使用生产者所需语义的参数进行配置,特别是使用值 Semantics.EXACTLY_ONCE 来表示恰好一次语义。

查看FlinkKafkaProducer的源码,事务id是自动生成和维护的。但是,我没有发现任何地方将底层 KafkaProducer 的 ProducerConfigenable.idempotence 设置为 true。

是否必须在提供给 FlinkKafkaProducerProducerConfig 中提供属性 enable.idempotence,或者是否有我监督过的内容?

最佳答案

不,不需要按照 Kafka documentation 中的说明进行设置。 :

If the transactional.id is set, idempotence is automatically enabled along with the producer configs which idempotence depends on.

正如您所注意到的,选择 Semantics.EXACTLY_ONCE 后,Flink 负责设置和控制 transactional.id 属性。

但是,您可能会对其他一些属性感兴趣 mentioned here 。我不确定现在怎么样,但正如我上次检查的那样,默认的 Kafka 代理/客户端配置实际上允许在某些情况下发生数据丢失。

关于apache-flink - FlinkKafkaProducer 的 ProducerConfig 具有一次性语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62283349/

相关文章:

apache-flink - Apache 弗林克 : Merge two DataStreams with a CoFlatMapFunction

java - 比较 Flink Table API 与 join table 和 DataStream.join()

scala - apache flink : how to interpret DataStream. 打印输出?

java - Apache flink 维基百科使用 Scala 编辑分析

java - 在 Apache Flink 1.4 中模拟 ListState

apache-spark - 流处理中的非确定性函数

apache-flink - 流中记录的排序

java - Apache Flink - 使用带有泛型类型参数的类

bigdata - Apache Flink 中 shuffle() 和 rebalance() 的区别

apache-flink - 如何按事件时间加入实时流和延迟流