我有以下Kafka设置
Number of producer : 1
Number of topics : 1
Number of partitions : 2
Number of consumers : 3 (with same group id)
Number of Kafka cluster : none(single Kafka server)
Zookeeper.session.timeout : 1000
Consumer Type : High Level Consumer
Producer生成的消息没有任何特定的分区逻辑(默认分区逻辑)。消费者1持续消费信息。我突然杀死了消费者1,在消费者1失败后,我会让消费者2或消费者3使用消息。
在某些情况下,会发生重新平衡,消费者2开始消费消息。这很好。但在某些情况下,消费者2或消费者3根本不是在消费。我必须手动杀死所有的消费者,然后重新启动所有三个消费者。只有在该重新启动之后,消费者1才开始再次消费。
在某些情况下,精确的再平衡是成功的,而在一些情况下,再平衡是不成功的。我缺少什么配置吗。
Kafka使用Zookeeper来协调高级消费者。
发件人http://kafka.apache.org/documentation.html:
分区所有者注册表
在给定的消费者群体。消费者必须确定其对给定分区,然后才能开始任何消耗。建立所有权,使用者在它正在声明的特定代理分区。
/消费者/[group_id]/owners/[topic]/[broker_id-partition_id]-->consumer_node_id(临时节点)
有一个已知的短暂节点怪癖,在ZK客户端突然宕机后,它们可能会停留长达30秒:http://developers.blog.box.com/2012/04/10/a-gotcha-when-using-zookeeper-ephemeral-nodes/
因此,如果您希望消费者2和3在#1终止后立即开始读取消息,那么您可能会遇到这种情况。
您还可以检查consumers/[group_id]/owners/[topic]/[broker_id-partition_id]在重新平衡后是否包含正确的数据。