我有一个用@kafkalistener注释的kafka消费者方法。我已经在容器上设置了重试模板,并且重试配置是这样,如果在处理msg时发生异常,它将始终重试几个异常。我已将max-poll-records设置为1。如果这种情况是实时发生的,并且消费者一直在不断尝试重试msg,那么经纪人会认为该消费者已死并触发重新平衡吗?或者,在重试时,消费者会轮询失败的同一消息吗?如果是这样,由于正在进行民意调查,因此我认为不会有任何重新平衡。另外,我手动提交偏移量,因此我的enable.auto.commit属性设置为false,而ack-mode是手动的。任何人都可以澄清一下吗?预先感谢。
答案 0 :(得分:0)
是的,当在侦听器适配器级别使用无状态重试(默认)时,如果超过max.poll.interval.ms
,它将导致重新平衡。
您应该改用Stateful Retry。
在这种情况下,异常将被抛出到容器中,并且SeekToCurrentErrorHandler
将重新寻找未处理的分区(包括失败的记录)。您仍然需要确保最大的退避时间小于轮询间隔。无需将max.poll.records
设置为1,因为查找是在所有未处理的分区上完成的。
从2.3版开始,您可以在侦听器级别消除重试,而只需使用SeekToCurrentErrorHandler
。