Apache kafka 如何使用手动确认卡夫卡消息的指数回退
我有一个Springboot项目,它接收关于卡夫卡主题的消息。应用程序本身相当简单Apache kafka 如何使用手动确认卡夫卡消息的指数回退,apache-kafka,spring-kafka,Apache Kafka,Spring Kafka,我有一个Springboot项目,它接收关于卡夫卡主题的消息。应用程序本身相当简单 收到消息 对另一个服务执行REST请求 成功后确认消息 如果由于任何原因,REST请求失败,将执行无限指数退避以继续尝试REST请求(消息有一个过期时间,超过该时间将被丢弃以防止消息永久重试) 情景: 接收到一条消息,该消息未通过REST请求,并处于重试循环中(偏移量1)。 接收到另一条成功的消息(偏移量2)。第二条消息确认该消息,因为它成功地将分区偏移量设置为2 如果应用程序在此场景中崩溃或停机,当它返回时,消
SeekToCurrentErrorHandler
中配置的ExponentialBackOff
实现无限重试,则不会发生这种情况
您将始终获得重新交付的补偿1,直到成功;在此之前,您不会看到偏移量2。谢谢您的回答,我非常感谢。当您提到“在此之前您将不会看到偏移量2”时,是否意味着整个应用程序将在重试的消息上被阻止?我们的目标是不断重试失败的消息,但不会阻止那些在尝试后会成功的消息。您将能够从其他分区接收消息(如果您的并发性>1),但无法从当前分区的较低位置接收消息。如果异步处理记录,则可以这样做,但这将带来管理偏移量的噩梦。通过添加分区,卡夫卡可以最好地实现并发性。这就是说,如果您的rest服务关闭,那么它将全部关闭。如果您有一个多代理群集,并且您在不同的实例上有多个分区,那么即使是单个使用者(并发性=1)也可能会取得进展,因为失败的记录并不总是第一个交付的记录。