具有精确一次语义的 FlinkKafkaProducer 的 ProducerConfig

ProducerConfig for FlinkKafkaProducer with exactly-once semantics

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

在 Apache Flink 中,可以为 FlinkKafkaProducer 配置生产者所需语义的参数,特别是为 exactly once 语义配置值 Semantics.EXACTLY_ONCE

查看 FlinkKafkaProducer 的源代码,交易 ID 是自动生成和维护的。但是,我没有发现任何地方 enable.idempotence 被设置为 true 底层 KafkaProducer.

ProducerConfig

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

不,不需要按照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 brokers/clients 配置实际上允许在某些情况下发生数据丢失。