2016-09-28 78 views
1

我正在使用kafka 0.9.0.1经纪人0.9.0.1消费者客户端。我的消费者实例消耗的记录处理时间少于1秒。和其他主要配置是CommitFailedException:由于组重新平衡而无法完成提交

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

我在处理后提交抵消。 我得到异常而犯偏移量组 kafka_to_s3

ERROR com.bsb.hike.analytics.consumer.Consumer发生

错误UNKNOWN_MEMBER_ID - 无法提交 RetryCount重= 2 org.apache。 kafka.clients.consumer.CommitFailedException: 提交不能完成,由于组中的一个小时重新平衡

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

有人有关于这些问题的线索吗?

回答

3

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

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

  2. 卡夫卡0.9消费者有一个已知的问题,可能会导致您面临的问题。

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

在这两种情况下,降级消费0.8将解决这个问题。

编辑:你可以尝试增加会话时间高达5分钟,看看它是否工作。

关于卡夫卡CONFIGS

卡夫卡服务器期望其接收的会话超时内的至少一个心跳。所以消费者试图最多做一次心跳(会话超时/心跳次数)。一些心跳可能会错过。所以你的心跳时间不应该超过会话超时的1/3。 (你可以参考文档)

+0

Thanks @yaswanth – minhas23

相关问题