RetryTemplate 与 @RetryableTopic

Sat*_*rpa 2 apache-kafka spring-boot spring-kafka

我试图理解 RetryTemplate 和 @RetryableTopic 之间的异同。

RetryTemplate 定义在 KafkaListenerContainerFactory 内部,@RetryableTopic 注解与 @KafkaListener 一起添加。这更多的是风格上的差异还是它们有两个不同的目的?

Tom*_*des 5

这些是重试失败的处理记录的不同方法。

该RetryTemplate方法已被弃用- 它依赖于重试内存中的记录,如果重试的总时间大于该max.poll.interval.ms属性,则可能会触发分区重新平衡。

您可以使用DefaultErrorHandler来实现blocking retrials- 如果记录处理失败,框架将寻找该偏移量并再次接收记录 - 与之前的方法相比,这减少了等待重试时触发重新平衡的机会。在该记录成功或用尽重试之前,不会处理其他记录,如果您需要保持记录排序,这一点很重要。

@RetryableTopic方法使用一个或多个主题来实现,这意味着如果一条记录失败,它将被转发到另一个主题进行重试,而主主题将继续处理剩余的记录。non-blocking retrials在这种方法中,您会失去排序保证,以换取失败的记录处理重试不会减慢其他记录的处理速度。