【问题标题】:CommitFailedException: Commit cannot be completed due to group rebalanceCommitFailedException:由于组重新平衡,提交无法完成
【发布时间】:2017-02-06 07:54:06
【问题描述】:

我正在使用 kafka 0.9.0.1 代理0.9.0.1 消费者客户端。我的消费者实例正在使用处理时间少于 1 秒的记录。其他主要配置是

enable.auto.commit=false
session.timeout.ms=30000
heartbeat.interval.ms=25000

我在处理后提交偏移量。 我遇到了异常

提交组的偏移量时发生错误 UNKNOWN_MEMBER_ID kafka_to_s3

错误 com.bsb.hike.analytics.consumer.Consumer - 无法提交 retryCount=2 org.apache.kafka.clients.consumer.CommitFailedException: 由于组重新平衡,提交无法完成

一小时一次或两次。每天消耗大约 60 亿个事件。似乎偏移量仅存储在主题“__consumer_offsets”的一个分区中。它还会增加特定代理的负载。

有人知道这些问题吗?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    如果 Kafka 在会话超时内未收到至少一个心跳,则会触发重新平衡。如果触发了重新平衡,则提交将失败。这是意料之中的。所以问题是为什么心跳没有发生?这可能有几个原因。

    1. 首先,您正在执行手动提交。从 0.9 开始,心跳不在单独的线程中发生。消费者在处理提交、心跳和轮询的单个线程上运行。所以当你执行 consumer.poll() 或 consumer.commit() 时会发生心跳。因此,如果您的处理时间超过会话超时,则可能会导致心跳失败。

    2. kafka 0.9 消费者中存在一个已知问题,可能会导致您面临的问题。

    https://issues.apache.org/jira/browse/KAFKA-3627

    无论哪种情况,将消费者降级到 0.8 都可以解决问题。

    编辑:您可以尝试将会话超时时间增加到 5 分钟,看看是否有效。

    关于 kafka 配置

    Kafka 服务器希望在会话超时内至少收到一个心跳。所以消费者最多尝试做一次心跳(会话超时/心跳时间)。可能会错过一些心跳。所以你的心跳时间不应该超过会话超时的 1/3。 (可以参考文档)

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 1970-01-01
      • 2019-01-08
      • 2018-01-15
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多