Apache kafka 卡夫卡的高级消费者失败

Apache kafka 卡夫卡的高级消费者失败,apache-kafka,Apache 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

我有以下卡夫卡设置

    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,在消费者1出现故障后,我会使用消费者2或消费者3来消费消息

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

精确地说,在某些情况下,再平衡是成功的,而在某些情况下,再平衡并不成功。
是否有我缺少的配置。

卡夫卡使用Zookeeper协调高级消费者

发件人:

分区所有者注册表

每个代理分区都由一个给定分区内的单个使用者使用 消费者群体。消费者必须确定其对给定产品的所有权 在任何消费开始之前进行分区。建立 所有权,消费者在 它所声称的特定代理分区

/消费者/[group\u id]/owners/[topic]/[broker\u id-partition\u id]-> 消费者节点id(临时节点)

有一个已知的短暂节点怪癖,在ZK客户端突然停机后,它们可以逗留30秒:

因此,如果您希望消费者2和消费者3在#1终止后立即开始阅读消息,您可能会遇到这种情况


您还可以检查/consumers/[group\u id]/owners/[topic]/[broker\u id-partition\u id]在重新平衡后是否包含正确的数据。

谢谢您提供的信息。我有几个疑问。1) 如何确保在启动新客户端时删除临时节点。有没有办法在我的消费者计划中指定这一点。2) 在哪里可以找到/consumers目录。我只能在/tmp(Red hat linux)下看到kafkalogs dir。1)Zookeeper服务器会在客户端断开连接时自动删除临时节点。我相信断开连接是通过30秒内没有心跳消息响应检测到的。它应该是开箱即用的。2)/消费者/。。。不位于真正的文件系统上。Zookeeper将数据保存在类似文件系统的内部树状结构中。有一个工具可以查看和修改它。它通常位于盒子上的/opt/zookeeper/current/bin/zkCli.sh中,安装了ZK-in。sh支持ls、get、put、rmr等命令。有关详细信息,请参阅