如何解决如何在人工确认Kafka消息时使用指数补偿
我有一个Springboot项目,它接收有关Kafka主题的消息。该应用程序本身非常简单。
- 接收消息
- 对另一个服务执行REST请求。
- 成功后确认消息。
如果由于某种原因REST请求失败,则会实施不确定的指数回退以继续尝试REST请求(消息具有到期时间,超过该时间将被丢弃,以防止消息永久重试)。
场景: 收到一条消息,该消息使REST请求失败并且处于重试循环中(偏移1)。 收到另一条成功的消息(偏移2)。第二条消息由于成功而对消息进行了确认,从而将分区偏移设置为2。
如果在这种情况下应用程序崩溃或关闭,则在重新启动时消息(偏移量1)将丢失。
我该怎么做才能确保确认是连续的?重播消息不是问题,因为跟踪数据状态的数据库支持重复数据删除逻辑。
解决方法
实施了不确定的指数补偿以继续尝试REST请求
收到另一条成功的消息(偏移2)。
如果您通过在侦听器容器的ExponentialBackOff
中配置的SeekToCurrentErrorHandler
实施无限重试,则不会发生这种情况。
您将始终获得重新交付的偏移量1,直到成功;您将不会在此之前看到偏移量2。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。