Springboot Kafka-消费者幂等

时间:2020-03-11 20:29:21

标签: spring-boot apache-kafka spring-kafka

我有一个Spring-boot应用程序,可以监听kafka。为了避免重复处理,我尝试进行手动提交。为此,我提到了Commit Asynchronously a message just after reading from topic。但是我坚持如何实现 消费者幂等 ,这样记录就不会被处理两次。

1 个答案:

答案 0 :(得分:3)

Kafka根本不具备等幂(恰好一次)的消费者。

Kafka 确实

提供了一次语义
kafkaRead -> process -> kafkaWrite

但是“恰好一次”仅适用于整个流程。 process步骤是at least once

换句话说,仅当写入成功时才提交读取偏移。如果写入失败,将再次执行读取/处理/写入。

这是通过Kafka transactions实现的。

如果您要在process步骤中与其他商店进行交互(或者根本不进行卡夫卡写入-kafkaRead -> process),则必须编写自己的幂等(重复数据删除)代码。 / p>

但这比较容易,因为消费者记录通过topic/partition/offset具有唯一键-只需将这些记录与数据一起存储,并检查您是否尚未处理该记录。

Kafka 确实支持幂等生产者。