当StreamListener花费很长时间(比max.poll.interval.ms
长)来处理一条消息时,该特定使用者将被占用,并且其他新消息将分配给其他分区。时间大于max.poll.interval.ms
之后,发生了重新平衡,另一位消费者也会遇到相同的情况。因此,该消息将在所有分区中传播,并继续占用资源。
但是,这种情况并不经常发生,只有几条消息以某种方式花费了很长时间才能处理,并且这是无法控制的。
经过几次重新平衡后,我们可以提交偏移量并将其扔给DLQ吗?如果是,我们该怎么做?如果没有,那么这种情况的正确处理方法是什么?
答案 0 :(得分:0)
增加max.poll.interval.ms
不会对性能产生任何影响(除非检测到确实死亡的消费者需要更长的时间)。
每次处理此“不良”记录时都要进行重新平衡,这会对性能造成更大的损害。
但是,您可以使用自定义SeekToCurrentErrorHandler
together with a recoverer such as the DeadLetterPublishingRecoverer
来完成所需的操作。您还需要一个重新平衡监听器来计算重新平衡,并需要一种机制来跨实例共享来自错误处理程序的状态(标准的机制仅将状态保存在内存中)。
我认为这很复杂。