我指的是:
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实现无阻塞重试吗?
非阻塞重试最近被添加到新的2.7版本中。
https://docs.spring.io/spring-kafka/docs/current/reference/html/#retry-topic
使用Kafka实现非阻塞重试/dlt功能通常需要设置额外的主题并创建和配置相应的侦听器。自2.7 Spring for Apache以来,Kafka通过@RetryableTopic
注释和RetryTopicConfiguration类提供支持,以简化无融资创业。
如果消息处理失败,消息将被转发到带有后退时间戳的重试主题。然后重试主题消费者检查时间戳,如果时间戳不到期,它将暂停该主题分区的消费。到期时,分区消费将恢复,消息将再次被消费。如果消息处理再次失败,消息将被转发到下一个重试主题,并且重复该模式,直到成功处理发生,或者尝试用尽,消息将被发送到死信主题(如果已配置)。