今天,在我的Spring Boot和单实例Kafka应用程序中,我遇到了以下问题:
org.apache.kafka.clients.consumer.CommitFailedException:提交无法 由于该组已经重新平衡并分配了 分区到另一个成员。这意味着 后续对poll()的调用的时间比配置的时间长 max.poll.interval.ms,通常表示轮询循环为 花太多时间处理邮件。您可以解决这个问题 通过增加会话超时或减小最大大小 在poll()中返回的批次具有max.poll.records。
这可能是什么原因以及如何解决?据我了解-我的消费者被封锁了很长时间,对心跳没有反应。我应该调整Kafka属性以解决该问题。您能否告诉我应该调整哪些确切属性,例如在Kafka端或我的应用程序Spring Kafka端?
答案 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
属性,以避免超时和重新平衡。