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 支持幂等生产者。