我对KafkaListenerErrorHandler和ErrorHandler的角色和职责仍然感到困惑。以下是我目前对它们的理解,请纠正我如果我有误。
假设:使用Spring Kafka默认配置。
KafkaListenerErrorHandler
- 当使用@KafkaListener注解的方法出现异常时,此处理程序将被调用。根据文档,这发生在监听器级别。
ErrorHandler
- 当容器级别抛出异常时,此处理程序将被调用。处理错误后(通常只是记录一条日志),默认情况下会提交偏移量(因为isAckAfterHandle()默认返回true)。
我的疑惑
既然我们已经在容器级别有ErrorHandler,为什么还需要单独的KafkaListenerErrorHandler?一个监听器属于一个容器,这两个处理程序的区别是什么?
这是否意味着使用@KafkaListener注解时,容器级别的ErrorHandler永远不会处理错误,而是由监听器级别的KafkaListenerErrorHandler处理?
如果使用@KafkaListener注解时,容器级别的ErrorHandler从未被调用,那么偏移量是如何提交的?KafkaListenerErrorHandler负责处理吗?KafkaListenerErrorHandler将重试失败的消息多少次?
KafkaListenerErrorHandler如何进行重试/恢复?