【问题标题】:High Level Consumer Failure in KafkaKafka 中的高级消费者故障
【发布时间】:2014-10-28 14:30:43
【问题描述】:

我有以下 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,除了消费者 2 或消费者 3 之外,我会在消费者 1 失败后消费消息。

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

精确地重新平衡在某些情况下是成功的,而在某些情况下重新平衡是不成功的。 有没有我遗漏的配置。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

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

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

    分区所有者注册表

    每个代理分区由给定内的单个消费者使用 消费群体。消费者必须确定其对给定物品的所有权 在任何消费开始之前进行分区。建立其 所有权,消费者将自己的 id 写入一个临时节点中 它声称的特定代理分区。

    /consumers/[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] 重新平衡后是否包含正确的数据。

    【讨论】:

    • 感谢您的信息。我有几个疑问。 1)如何确保在启动新客户端时删除临时节点。有没有办法在我的消费者程序中指定这一点。 2)我在哪里可以找到 /consumers 目录。我只能看到 /tmp (Red hat linux) 下的 kafkalogs 目录。
    • 1) Zookeeper 服务器会在客户端断开连接时自动删除临时节点。我相信 30 秒内没有心跳消息响应会检测到断开连接。它应该开箱即用。
    • 2) /consumers/... 不在真实的文件系统上。 Zookeeper 将数据保存在类似于文件系统的内部树状结构中。有一个工具可以查看和修改它。它通常位于盒子上的 /opt/zookeeper/current/bin/zkCli.sh 中,其中安装了 ZK。 zkCli.sh 支持 ls、get、put rmr 等命令,详见zookeeper.apache.org/doc/r3.3.4/zookeeperStarted.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2017-07-10
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多