【问题标题】:Why does kafka producer take a broker endpoint when being initialized instead of the zk为什么kafka生产者在初始化时使用代理端点而不是zk
【发布时间】:2014-04-22 01:36:38
【问题描述】:

如果我有多个代理,我的生产者应该使用哪个代理?我是否需要手动切换代理来平衡负载?另外为什么消费者只需要一个zookeeper端点而不是一个代理端点?

教程中的快速示例:

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    我的生产者应该使用哪个代理?
    我需要手动切换代理来平衡负载吗?

    Kafka 在集群上运行,即节点集,因此在生成任何内容时,您需要告诉他您为应用程序配置的代理的LIST,下面是从他们的文档中摘录的一个小注释。

    “metadata.broker.list”定义了 Producer 可以在哪里找到一个或多个 Broker 以确定每个主题的 Leader。这不需要是集群中的全套代理,但应至少包括两个,以防第一个代理不可用。无需担心找出哪个 Broker 是主题(和分区)的领导者,生产者知道如何连接到 Broker 并请求元数据,然后连接到正确的 Broker。

    希望这能消除你的一些困惑

    还有为什么消费者只需要一个zookeeper端点而不是一个 代理端点

    这在技术上是不正确的,因为有两种类型的 API 可用,高级和低级消费者。

    高级消费者基本上负责大部分事情,如领导者检测、线程问题等,但没有提供对消息的太多控制,而这正是使用其他替代方案的目的简单或低级消费者,您可以在其中将看到您需要提供代理、分区相关的详细信息。

    所以消费者只有在使用高级API时才需要zookeeper端点,如果使用Simple,则需要提供其他信息

    【讨论】:

    【解决方案2】:

    Kafka 将单个代理设置为每个主题的每个分区的领导者。领导者负责处理对该分区的读取和写入。您不能决定从非领导者代理读取或写入。

    那么,向 kafka-console-producer 提供代理或代理列表意味着什么?好吧,您在命令行上提供的一个或多个代理只是您的生产者的第一个联系点。如果您列出的代理不是您需要的主题/分区的领导者,您的生产者将获取当前领导者信息(在 kafka 中称为“主题元数据”)并在发送写入之前根据需要重新连接到其他代理。事实上,如果您的主题有多个分区,它甚至可以并行连接到多个代理(如果分区领导者是不同的代理)。

    第二问:为什么消费者需要一个zookeeper列表而不是broker列表?对此的答案是,kafka 消费者可以在“组”中操作,而 zookeeper 用于协调这些组(组如何工作是一个更大的问题,超出了本 Q 的范围)。 Zookeeper 还存储主题的代理列表,因此消费者可以直接从 Zookeeper 中提取代理列表,从而使额外的 --broker-list 有点多余。

    【讨论】:

    • 但是为什么producer不能也从zookeeper中拉取broker列表呢?
    【解决方案3】:

    Kafka Producer API 不直接与 Zookeeper 交互。但是,高级消费者 API 连接到 Zookeeper 以获取/更新每个消费者的分区偏移信息。因此,如果无法连接到 Zookeeper,消费者 API 将会失败。

    【讨论】:

      【解决方案4】:

      以上所有答案在旧版本的 Kafka 中都是正确的,但随着 Kafka 0.9 的到来,情况发生了变化。

      现在,生产者或消费者不再与 zookeeper 进行任何直接交互。另一个有趣的事情是在 0.9 中,Kafka 消除了高级和低级 API 之间的差异,因为两者都遵循统一的消费者 API。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        • 2016-12-18
        • 1970-01-01
        相关资源
        最近更新 更多