【发布时间】:2021-12-28 00:17:43
【问题描述】:
我很难理解 KafkaListenerErrorHandler 和 ErrorHandler 的角色和职责。到目前为止,这是我对其中每一个的理解。如果我错了,请纠正我。
假设:使用开箱即用的默认 Spring Kafka 配置。
KafkaListenerErrorHandler
- 只要在使用@KafkaListener 注释的方法中发生异常,就会调用此处理程序。根据文档,这发生在侦听器级别。
错误处理程序
- 只要在容器级别引发异常,就会调用此处理程序。这将在处理错误(这只是一条日志消息)后提交偏移量(因为默认情况下 isAckAfterHandle() 返回 true)。
我的困惑
-
既然我们已经在容器级别上拥有了 ErrorHandler 并且侦听器属于容器,为什么还要有一个单独的 KafkaListenerErrorHandler?
-
这是否意味着当我们使用@KafkaListener 注解时,错误永远不会由容器级别的ErrorHandler 处理,而是由侦听器级别的KafkaListenerErrorHandler 处理?
-
如果容器级别的 ErrorHandler 在使用 @KafkaListener 注解时从未被调用,那么如何提交偏移量? KafkaListenerErrorHandler 对此负责吗? KafkaListenerErrorHandler 会重试失败的消息多少次?
-
KafkaListenerErrorHandler 的重试/恢复如何工作?
【问题讨论】: