【问题标题】:Spring Boot Kafka: Commit cannot be completed since the group has already rebalancedSpring Boot Kafka:由于组已经重新平衡,因此无法完成提交
【发布时间】:2019-01-08 22:37:47
【问题描述】:

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

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

这可能是什么原因以及如何解决?据我了解 - 我的消费者被屏蔽了很长时间,并且没有响应心跳。我应该调整 Kafka 属性以解决它。你能告诉我我应该调整哪些确切的属性以及在哪里调整,例如在 Kafka 端还是在我的应用程序 Spring Kafka 端?

【问题讨论】:

    标签: spring spring-boot apache-kafka


    【解决方案1】:

    默认情况下,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 属性以避免超时和重新平衡。

    【讨论】:

    • 感谢您的回答!你能告诉我我必须在哪里设置max.poll.interval.ms 属性吗?
    • 当然,在创建它时在传递给消费者的属性中设置它,在普通的 java 客户端中,你将在传递给 new KafkaConsumer<>(properties); 调用的 Properties 对象中设置它。跨度>
    • 请注意,max.poll.interval.ms 从 v2.0.0 开始更改为 30 秒
    • 不合逻辑...我想在部署理想的消费者之前需要一些计划!
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2018-01-17
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多