从 2017 年 6 月 28 日发布的 Kafka 最新版本 (0.11.0.0) 开始,kafka 团队提供了新功能以支持一次性交付。
下载最新版本后,我尝试配置 Producer(通过 kafka-console- Producer.sh 脚本执行),如 Producer configs 中所述。 :我设置了 enable.idempotence=true
和 transactional.id=0A0A
。
问题是,当我启动生产者时,我收到一个 ConfigException
,指出 acks
必须设置为 all
或 - 1
(即使我在 Producer.properties 文件中设置它,并将其作为参数传递给控制台脚本)。
这可能是无法使用控制台脚本设置幂等性的根本原因吗?此外,有没有办法通过提供的控制台脚本进行原子事务生成消息?
详细信息:
总的来说,所采用的解决方案基于两个主要概念:
- 幂等生产者由于在生产者配置中引入了事务 ID,因此只能写入一次特定消息 在多个的情况下也保证原子性 单个主题的分区);
- 在消费者方面,通过
isolation.level=read_commissed
属性,我们现在只能在提交事务后才能读取消息。
最佳答案
控制台制作者设置自己的默认值。尝试添加 --request-required-acks "all"
或 --request-required-acks -1
将 ack 设置为 all 以代替默认值 1。
关于exception - Kafka - "exactly once delivery"语义中的幂等生产者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44987837/