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