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

时间:2018-08-01 11:15:55

标签: spring spring-boot apache-kafka

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

  

org.apache.kafka.clients.consumer.CommitFailedException:提交无法   由于该组已经重新平衡并分配了   分区到另一个成员。这意味着   后续对poll()的调用的时间比配置的时间长   max.poll.interval.ms,通常表示轮询循环为   花太多时间处理邮件。您可以解决这个问题   通过增加会话超时或减小最大大小   在poll()中返回的批次具有max.poll.records。

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

1 个答案:

答案 0 :(得分:6)

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

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