卡夫卡的高级消费者失败



我有以下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]在重新平衡后是否包含正确的数据。

最新更新