apache-kafka - 在 MANUAL_IMMEDIATE 模式下根本不确认 kafka 消息
问题描述
我找不到与此问题相关的任何文档,因此问题。
如果设置为时@KafkaListener
方法根本不调用acknowledgement.acknowledge()
,但没有任何异常成功退出方法,会发生什么情况。ackMode
MANUAL_IMMEDIATE
我们在我们的一个消费者中遇到了这个问题并丢失了消息(确切地说是偏移量移动了,我们预计偏移量不会移动,因为我们从未调用过acknowledgement.acknowledge()
),这是预期的行为吗?
这里的问题似乎解决了同样的问题,但从未收到关于没有异常时会发生什么的答案,因为我相信错误处理程序和恢复器仅在引发异常时才起作用,而不是在消息未确认的情况下。
解决方案
Kafka 维护了两个指针;提交的偏移量和当前位置。
如果不调用acknowledge()
,正常退出,提交的偏移量不会移动,但位置会移动;您将在下一个获得下一个记录poll()
。
如果您重新启动应用程序,您将再次获得相同的记录。
您还必须将 Kafka 消费者属性设置enable.auto.commmit
为false
- spring-kafka(自 2.3 起)会自动执行此操作,除非您已明确设置它。
推荐阅读
- java - Bean的动态初始化——Spring
- javascript - 如何添加二维数组Javascript的元素
- python - 计算 numpy 数组(列表)中元素的出现次数
- powershell - 如何从 bat 文件运行这些 PowerShell 命令?
- point-cloud-library - PCL泊松重构
- reactjs - 在具有动态创建路径的 SSG NextJS 站点上使用 initialApolloState
- html - 如何使用 HTML 和 CSS 重新创建相同的 Angular Material 切换选择代码?
- numpy - 如何使用单应性将两个相机 FOV 转换为一个显示图像
- node.js - Create-react-app 不适用于已安装的 npm 版本
- firebase - 发送 Google Firebase 命令时的数据队列