如何使用Spring Kafka批处理侦听器进行有状态重试

时间:2019-08-27 17:52:35

标签: spring apache-kafka kafka-consumer-api spring-kafka

我正在这里https://docs.spring.io/spring-kafka/docs/2.2.6.RELEASE/reference/html/#retrying-deliveries阅读文档,我无法弄清楚用批处理侦听器实现有状态重试的正确方法是什么

文档说“没有为批处理消息侦听器提供重试适配器,因为该框架不知道失败发生在批处理中的位置”。

这对我的用例来说不是问题,因为我只想重试整个批次。

文档建议我在侦听器内部使用RetryTemplate。好的,我可以做到。

问题出现在下一部分,该部分讨论如何使用有状态重试标志在重试之间进行消费者轮询,以防止代理丢弃我的消费者。

如何配置批处理侦听器来做到这一点?批处理侦听器是否支持有状态重试标志?如果“我的重试”逻辑位于侦听器内部,这是否会阻止轮询? statefulRetry标志到底能做什么?

2 个答案:

答案 0 :(得分:1)

否;您不能将regedit.exe添加到用于批处理侦听器的容器工厂。

  

java.lang.ClassCastException:org.springframework.kafka.listener.adapter.BatchMessagingMessageListenerAdapter无法转换为org.springframework.kafka.listener.MessageListener

We will clean that up with a more meaningful error.

随着即将发布的2.3版本(目前将于下周五发布的候选版本)you can add a BackOff to the SeekToCurrentErrorHandler,其功能与Set-Culture类似;在当前版本中,将立即尝试重新交付。

此外,另一个新功能recently merged提供了一种从批处理中的特定索引重试的机制。

答案 1 :(得分:1)

spring kafka的最新版本具有特殊的RetryingBatchErrorHandler。 https://docs.spring.io/spring-kafka/docs/2.4.6.RELEASE/reference/html/#retrying-batch-eh谢谢,春季卡夫卡队!