使用 Kafka API 创建具有一次性语义的 Kafka 生产者时,必须设置两个属性:transactional.id
必须设置为事务 id,以及 enable。幂等性
必须设置为true。
在 Apache Flink 中,FlinkKafkaProducer
可以使用生产者所需语义的参数进行配置,特别是使用值 Semantics.EXACTLY_ONCE
来表示恰好一次语义。
查看FlinkKafkaProducer
的源码,事务id是自动生成和维护的。但是,我没有发现任何地方将底层 KafkaProducer 的 ProducerConfig
的 enable.idempotence
设置为 true。
是否必须在提供给 FlinkKafkaProducer
的 ProducerConfig
中提供属性 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/