卡夫卡的高水平消费者失败

时间:2014-10-28 14:30:43

标签: apache-kafka

我有以下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

生产者生成没有任何特定分区逻辑的消息(默认分区逻辑)。 消费者1持续消费消息。我突然杀死了消费者1,除了消费者2或消费者3之外,我会在消费者1失败后消费消息。

在某些情况下,会发生重新平衡,而消费者2会开始使用消息。这很好。 但在某些情况下,消费者2或消费者3根本不消费。我必须手动杀死所有消费者并再次启动所有三个消费者。 只有在重新启动之后,消费者1才会再次开始消费。

在某些情况下,精确重新平衡是成功的,而在某些情况下,重新平衡不成功。 是否有任何我缺少的配置。

1 个答案:

答案 0 :(得分:1)

Kafka使用Zookeeper协调高级别消费者。

来自http://kafka.apache.org/documentation.html

  

分区所有者注册表

     

每个代理分区由给定的单个使用者使用   消费者群体。消费者必须确定其给定的所有权   任何消费开始之前的分区。建立它的   所有权,消费者在其下的短暂节点中写入自己的id   它声称的特定经纪人分区。

     

/ consumers / [group_id] / Owner / [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]是否包含正确的数据。