【问题标题】:Role of ZooKeeper in cluster?ZooKeeper 在集群中的作用?
【发布时间】:2017-11-25 22:32:12
【问题描述】:

如果我有集群托管 1 个具有三个分区的主题。所以 ZooKeeper(ZK) 集群托管了 3 个代理实例。

根据我的理解,

  1. 生产者将与 ZooKeeper 交互以在代理上发布消息。
  2. ZK 将在内部根据每个代理实例的负载决定它需要哪个分区来发布消息。 Broker 也会与 ZK 交互 维护每个消费者实例的偏移量
  3. 同样,Consumer 将与 ZooKeeper 交互以使用来自代理的消息。 ZK 将根据负载从正确的代理中获取消息。

但我在阅读下面Workflow of Queue Messaging / Consumer Group部分的粗体文字后感到困惑 在kafka tutorial。我上面的理解错了吗?基于下面看起来像生产者/消费者不直接与动物园管理员交互。是不是反过来 ZK 与生产者/消费者交互的地方。如果是,谁(Zookeeper 或代理)需要发布或使用哪个代理实例消息?

ZooKeeper 服务主要用于通知生产者和消费者 Kafka 系统中存在任何新代理或 Kafka 系统中的代理。根据收到的通知 Zookeeper 关于经纪人和生产者的存在或失败 消费者做出决定并开始协调他们的任务 其他经纪人。基本上 Apache Zookeeper 是一个分布式的 配置和同步服务

【问题讨论】:

    标签: java apache-kafka apache-zookeeper


    【解决方案1】:

    您似乎很困惑,您认为大部分由 Kafka 代理完成的事情实际上是由客户端完成的,而您认为大部分由 Zookeeper 完成的事情实际上是由代理完成的。

    Kafka 是一个非常可扩展的系统,因为客户端进行了大量处理。客户端未完成的部分由代理(以及称为控制器和协调器的特殊代理组件)完成。除了存储状态和代理的一些配置(以非常可靠的方式)之外,Zookeeper 几乎没有做任何事情

    解决你的观点:

    1) 不正确。新的 Producer 不直接与 ZooKeeper 交互。生产者直接与代理对话以发布消息或发出元数据请求以查找哪个代理是其要发布到的分区的领导者。

    2) 不正确。 ZK 不会“决定”任何事情。 ZK 是一个复制的容错存储系统,代理使用它来保存集群的信息和状态。将发布到哪个分区的决定在生产者中完成,并且取决于正在发布的消息的密钥和客户端分区算法。分区不是基于负载分配的,而是基于密钥(或者如果密钥为空)然后使用循环算法分配的。 Broker 不会与 ZK 交互以维护每个消费者实例的偏移量。消费者跟踪他们自己的偏移量并将它们存储(偶尔通过偏移量提交)在代理的 _consumer_offsets 主题中。

    3) 不正确。新消费者不会直接与 ZooKeeper 交互以使用来自代理的消息。 ZK 不会根据负载从正确的代理中获取消息。消费者将直接与经纪人对话,通过使用 kafka 协议发送给经纪人的 RPC 加入和离开消费者组。

    【讨论】:

    • 是的,生产者可以(可选)指定它想要发布到的特定分区,而不考虑消息密钥。 producer.send(new ProducerRecord(topic, partition, key1, value1), callback1);见kafka.apache.org/0102/javadoc/index.html?org/apache/kafka/…
    • 点 1/2 Producer talks directly to the brokers to publish messages or make meta-data requests to find which broker is the ...。假设 kafka 为 1 个主题托管 3 个代理实例(分区),您的意思是生产者将根据消息的键决定分区号,然后简单地将消息发布到 kafka。然后kafka会决定谁是那个分区的leader并发布它?在这种情况下,来自同一生产者的消息可以根据消息键发送到不同的分区。那是对的吗 ?生产者是否可以指定它想要发布的特定分区而不考虑消息密钥?
    • 第 2 点 and store them (occasionally, via offset commits) in the _consumer_offsets topic on the brokers... 我认为经纪人将这些已提交的偏移量保留在 zookeeper 上?
    • Point 3 Consumers will talk directly to the brokers .. broker 将如何决定从哪个分区中提取消息?
    • 不在 0.9 或更高版本中。 Broker 将这些提交的偏移量保存在一个专门用于存储偏移量的 Kafka 主题中
    【解决方案2】:

    Kafka 将 zookeeper 用于: 1、Leader选择:对于复制因子较高的主题分区,这是必需的。想法是选择一个节点作为分区的领导者,它跟踪偏移管理和复制到跟随者。 ZK 用于选举领导者,以确保始终有一个可用的领导者。 2.集群成员:管理代理 3. Topics:管理集群上存在的topic,partition数量,replicas数量,replica位置等...

    消费者特定: 您可以选择在 ZK 上管理消费者偏移量。因此 ZK 将管理消费者组的最新偏移量和成员。

    我希望这能回答您的问题

    【讨论】:

    • “您可以选择管理 ZK 上的消费者偏移量”请您链接我有关此的文档吗?
    • 我在这条评论中指的是旧的 kafka 消费者,其中消费者组管理由 Zookeeper 执行。
    猜你喜欢
    • 2017-03-01
    • 2015-01-17
    • 2017-11-20
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2019-04-12
    相关资源
    最近更新 更多