Swa*_*nil 1 apache-kafka spring-boot spring-kafka
我有一个监听 kafka 的 Spring-boot 应用程序。为了避免重复处理,我尝试进行手动提交。为此,我在阅读主题后立即引用了异步提交消息。但我陷入了如何实现消费者幂等性的困境,这样记录就不会被处理两次。
Kafka 不存在幂等(仅一次)消费者这样的东西。
Kafka确实提供了一次语义
kafkaRead -> process -> kafkaWrite
Run Code Online (Sandbox Code Playgroud)
但“恰好一次”仅适用于整个流程。步骤process
是at least once
.
换句话说,只有在写入成功时才会提交读取的偏移量。如果写入失败,将重新执行读取/处理/写入。
这是使用Kafka 事务实现的。
如果您在该步骤中与其他一些存储进行交互process
(或者根本不进行 kafka 写入 - kafkaRead -> process
),则必须编写自己的幂等(重复数据删除)代码。
但这相对容易,因为消费者记录具有唯一的密钥topic/partition/offset
- 只需存储带有数据的记录并检查您是否尚未处理该记录。
Kafka确实支持幂等生产者。
归档时间: |
|
查看次数: |
2063 次 |
最近记录: |