Springboot Kafka - 消费者幂等性
Posted
技术标签:
【中文标题】Springboot Kafka - 消费者幂等性【英文标题】:Springboot Kafka - Consumer idempotence 【发布时间】:2020-06-23 21:46:58 【问题描述】:我有一个监听 kafka 的 Spring-boot 应用程序。为避免重复处理,我正在尝试手动提交。为此,我推荐了Commit Asynchronously a message just after reading from topic。但我不知道如何实现消费者幂等,这样记录就不会被处理两次。
【问题讨论】:
【参考方案1】:Kafka 不存在幂等(恰好一次)消费者。
Kafka确实为
提供了仅一次的语义kafkaRead -> process -> kafkaWrite
但“恰好一次”仅适用于整个流程。 process
步骤是at least once
。
换句话说,只有在写入成功时才会提交读取的偏移量。如果写入失败,将再次执行读/处理/写。
这是使用Kafka transactions 实现的。
如果您在 process
步骤中与其他商店进行交互(或者根本不进行 kafka 写入 - kafkaRead -> process
),您必须编写自己的幂等(重复数据删除)代码。
但这相对容易,因为消费者记录通过topic/partition/offset
有一个唯一键 - 只需将那些与数据一起存储并检查您是否尚未处理该记录。
Kafka确实支持幂等生产者。
【讨论】:
这似乎很完美。有没有优化的方法来存储来自 Kafka 的记录,比较每次新获取的记录以检查它是否已经处理?我可以想到传统的方法,例如存储在数据库或缓存中。以上是关于Springboot Kafka - 消费者幂等性的主要内容,如果未能解决你的问题,请参考以下文章