Spring Boot Kafka:由于该组已经重新平衡,因此无法完成提交

ale*_*oid 2 spring apache-kafka spring-boot

今天,在我的Spring Boot和单实例Kafka应用程序中,我遇到了以下问题:

org.apache.kafka.clients.consumer.CommitFailedException:由于该组已经重新平衡并将分区分配给另一个成员,因此无法完成提交。这意味着后续调用poll()之间的时间比配置的max.poll.interval.ms更长,这通常意味着轮询循环在消息处理上花费了太多时间。您可以通过增加会话超时或通过使用max.poll.records减小poll()中返回的批处理的最大大小来解决此问题。

这可能是什么原因以及如何解决?据我了解-我的消费者被封锁了很长时间,对心跳没有反应。我应该调整Kafka属性以解决该问题。您能否告诉我应该调整哪些确切属性,例如在Kafka端或我的应用程序Spring Kafka端?

Chr*_*tta 10

默认情况下,Kafka将返回fetch.min.bytes(默认值1)最多max.poll.records(默认值500)或fetch.max.bytes(默认值52428800)的一批记录,否则它将等待fetch.wait.max.ms(默认值100)后返回一批数据。您的消费者应该对这些数据进行一些处理,然后poll()再次致电。您的消费者的工作有望在以下时间内完成max.poll.interval.ms(默认值300000-v2.0之前的5分钟,v2.0之后的30000-30秒)。如果在此超时到期之前未调用poll(),则认为使用方失败,该组将重新平衡以将分区重新分配给另一个成员。

因此,要解决您的问题,减少返回的消息数,或增加max.poll.interval.ms属性,以避免超时和重新平衡。