提问者:小点点

重试逻辑在主消费者等待Spring重试时阻塞主消费者


我指的是:

https://medium.com/trendyol-tech/how-to-implement-retry-logic-with-spring-kafka-710b51501ce2

它说如果我们使用下面的:

factory.setErrorHandler(new SeekToCurrentErrorHandler(new DeadLetterPublishingRecoverer(kafkaTemplate), 3));

它会在等待重试时阻止主消费者。(https://medium.com/trendyol-tech/how-to-implement-retry-logic-with-spring-kafka-710b51501ce2#:~: text=它也会在等待重试时阻止主消费者)

所以,我的问题是我们是否真的需要在主主题上重试,或者我们可以将失败的消息移动到重试主题,然后在那里处理消息,以便我们的主主题是非阻塞的。

我们可以使用STCH实现无阻塞重试吗?


共1个答案

匿名用户

非阻塞重试最近被添加到新的2.7版本中。

https://docs.spring.io/spring-kafka/docs/current/reference/html/#retry-topic

使用Kafka实现非阻塞重试/dlt功能通常需要设置额外的主题并创建和配置相应的侦听器。自2.7 Spring for Apache以来,Kafka通过@RetryableTopic注释和RetryTopicConfiguration类提供支持,以简化无融资创业。

如果消息处理失败,消息将被转发到带有后退时间戳的重试主题。然后重试主题消费者检查时间戳,如果时间戳不到期,它将暂停该主题分区的消费。到期时,分区消费将恢复,消息将再次被消费。如果消息处理再次失败,消息将被转发到下一个重试主题,并且重复该模式,直到成功处理发生,或者尝试用尽,消息将被发送到死信主题(如果已配置)。