spring-boot - 使用 Spring Cloud Stream Kafka binder 重复消费消息
问题描述
我们有几个使用 Spring Boot 和 Spring Cloud Stream Kafka binder 的微服务在它们之间进行通信。
有时,我们会观察到消费者收到的重复消息的爆发——通常是在首次消费和处理(成功)之后的几天。
虽然我知道 Kafka 不保证只交付一次,但它看起来仍然很奇怪,因为在经纪人和服务的日志中没有重新平衡事件或任何“可疑”活动。由于消费者正在与外部 API 进行交互,因此使其具有幂等性有点困难。
任何提示可能是重复的原因?我应该寻找什么来解决这个问题?
我们使用的是 Kafka 代理 1.0.0,而这个特定的消费者使用 Spring Cloud Stream Binder Kafka 2.0.0,它基于 kafka-client 1.0.2(其他服务的版本可能有点不同)。
解决方案
当你问这样的问题时,你应该展示你的配置。
最好的猜测是经纪人的offsets.retention.minutes
。
使用现代代理版本(自 2.0 起),默认为 1 周;旧版本只有一天。
推荐阅读
- mongodb - 如何仅基于日期而不是时间戳获取过滤 mongodb 文档?
- xml - 如何解决此“Cvc-elt.1.a:找不到元素'soap:Envelope'的声明。,'2'行,'63'列”
- angular - 为什么在尝试使用 Angular 检索数据库信息时出现错误 415?
- java - Java Iterator - 不能从静态上下文引用非静态方法 getID()
- c# - Uri Path 与 Java.IO.File 不兼容
- python - 如何在 Python 的 print 语句中获取准确克隆字符的空间?
- node.js - Sequelize (PostgresSQL) 多对多聊天实现
- c++ - 如何从 DirectShow 获取未压缩的字节数组?
- c# - 两个相同的类方法,具有不同的访问修饰符和接口
- powershell - 启动过程:位置参数和找不到指定的文件