Spring Boot Kafka——消费者幂等
Springboot Kafka - Consumer idempotence
我有一个 Spring-boot 应用程序可以监听 kafka。为了避免重复处理,我正在尝试进行手动提交。为此,我提到了 。但我一直在思考如何实现 消费者幂等性 以便记录不会被处理两次。
Kafka 不存在幂等(恰好一次)消费者。
Kafka 确实为
提供了恰好一次的语义
kafkaRead -> process -> kafkaWrite
但 "exactly once" 仅适用于整个流程。 process
步骤是 at least once
.
换句话说,读取的偏移量只有在写入成功时才会提交。如果写入失败,read/process/write将再次执行
这是使用Kafka transactions实现的。
如果您在 process
步骤中与其他商店交互(或者根本不进行 kafka 写入 - kafkaRead -> process
),您必须编写自己的幂等(重复数据删除)代码.
但这相对容易,因为消费者记录通过 topic/partition/offset
具有唯一键 - 只需将它们与数据一起存储并检查您是否尚未处理该记录。
Kafka 支持幂等生产者。
我有一个 Spring-boot 应用程序可以监听 kafka。为了避免重复处理,我正在尝试进行手动提交。为此,我提到了
Kafka 不存在幂等(恰好一次)消费者。
Kafka 确实为
提供了恰好一次的语义kafkaRead -> process -> kafkaWrite
但 "exactly once" 仅适用于整个流程。 process
步骤是 at least once
.
换句话说,读取的偏移量只有在写入成功时才会提交。如果写入失败,read/process/write将再次执行
这是使用Kafka transactions实现的。
如果您在 process
步骤中与其他商店交互(或者根本不进行 kafka 写入 - kafkaRead -> process
),您必须编写自己的幂等(重复数据删除)代码.
但这相对容易,因为消费者记录通过 topic/partition/offset
具有唯一键 - 只需将它们与数据一起存储并检查您是否尚未处理该记录。
Kafka 支持幂等生产者。