我使用的是kafka 0.9.0.1经纪人和 0.9.0.1消费者客户端。我的消费者实例正在消耗处理时间少于1秒的记录。其他主要配置是
enable.auto.commit=false
session.timeout.ms=30000
heartbeat.interval.ms=25000
我在处理后提交偏移量。 我得到了例外
一小时一到两次。每天消耗大约60亿个事件。似乎偏移仅存储在主题“__consumer_offsets”的一个分区中。它还会增加特定代理的负载。在为组提交偏移时发生错误UNKNOWN_MEMBER_ID kafka_to_s3
错误com.bsb.hike.analytics.consumer.Consumer - 无法提交 retryCount = 2 org.apache.kafka.clients.consumer.CommitFailedException: 由于组重新平衡,无法完成提交
有人对这些问题有所了解吗?
答案 0 :(得分:4)
如果Kafka在会话超时内没有收到至少一个心跳,则会触发重新平衡。如果触发了重新平衡,则提交将失败。这是预料之中的。所以问题是为什么没有发生心跳?可能有几个原因。
首先,您正在进行手动提交。从0.9开始,心跳不会发生在单独的线程中。使用者在一个线程上运行,该线程处理提交,心跳和轮询。因此,当您执行consumer.poll()或consumer.commit()时会发生心跳。因此,如果您的处理时间超过会话超时,则可能导致心跳失败。
kafka 0.9消费者中存在一个已知问题,可能会导致您遇到的问题。
https://issues.apache.org/jira/browse/KAFKA-3627
在任何一种情况下,将您的消费者降级到0.8都可以解决问题。
编辑:你可以尝试将会话时间增加到5分钟,看看它是否有效。
关于kafka配置
Kafka服务器期望它在会话超时内至少收到一个心跳。因此,消费者最多尝试进行心跳(会话超时/心跳次数)。可能会错过一些心跳。因此,您的心跳时间不应超过会话超时时间的1/3。 (您可以参考文档)