使用 Spring Cloud Stream Kafka 活页夹重复使用消息

duplicate consumption of messages with Spring Cloud Stream Kafka binder

我们有几个微服务使用 Spring Boot 和 Spring Cloud Stream Kafka binder 在它们之间进行通信。

有时,我们会观察到消费者收到大量重复消息 - 通常是在首次消费和处理(成功)后几天。

虽然我知道 Kafka 不保证精确一次交付,但它看起来仍然很奇怪,因为在任何一个代理的日志中都没有重新平衡事件或任何 'suspicious' activity也不是服务。由于消费者正在与外部 API 进行交互,因此使其幂等性有点困难。

有什么提示可能是重复的原因吗?我应该寻找什么来解决这个问题?

我们使用的是 Kafka broker 1.0.0,这个特定的消费者使用 Spring Cloud Stream Binder Kafka 2.0.0,它基于 kafka-client 1.0.2(其他服务的版本可能是有点不同)。

问这种问题的时候应该出示你的配置。

最好的猜测是经纪人的 offsets.retention.minutes

对于现代代理版本(自 2.0 起),默认为 1 周;对于旧版本,只有一天。