CommitFailedException:由于组重新平衡,无法完成提交

min*_*s23 2 apache-kafka kafka-consumer-api

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

enable.auto.commit=false
session.timeout.ms=30000
heartbeat.interval.ms=25000
Run Code Online (Sandbox Code Playgroud)

我在处理后提交了偏移量。我正在例外

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

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

一小时一次或两次。每天消耗约60亿个事件。似乎偏移量仅存储在主题“ __consumer_offsets”的一个分区中。这也增加了特定经纪人的负担。

有人对这些问题有头绪吗?

yas*_*nth 6

如果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。(您可以参考文档)