Springboot Kafka - 消费者幂等性

Swa*_*nil 1 apache-kafka spring-boot spring-kafka

我有一个监听 kafka 的 Spring-boot 应用程序。为了避免重复处理,我尝试进行手动提交。为此,我在阅读主题后立即引用了异步提交消息。但我陷入了如何实现消费者幂等性的困境,这样记录就不会被处理两次。

Gar*_*ell 7

Kafka 不存在幂等(仅一次)消费者这样的东西。

Kafka确实提供了一次语义

kafkaRead -> process -> kafkaWrite
Run Code Online (Sandbox Code Playgroud)

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

换句话说,只有在写入成功时才会提交读取的偏移量。如果写入失败,将重新执行读取/处理/写入。

这是使用Kafka 事务实现的。

如果您在该步骤中与其他一些存储进行交互process(或者根本不进行 kafka 写入 - kafkaRead -> process),则必须编写自己的幂等(重复数据删除)代码。

但这相对容易,因为消费者记录具有唯一的密钥topic/partition/offset- 只需存储带有数据的记录并检查您是否尚未处理该记录。

Kafka确实支持幂等生产者。