【问题标题】:Why do we need to mention Zookeeper details even though Apache Kafka configuration file already has it?为什么我们需要提到 Zookeeper 的细节,即使 Apache Kafka 配置文件已经有了呢?
【发布时间】:2018-01-25 15:36:24
【问题描述】:

过去几个月我在(普通香草)Hadoop 集群中使用 Apache Kafka,出于好奇,我问了这个问题。只是为了获得更多关于它的知识。

Kafka server.properties 文件已经有以下参数:

zookeeper.connect=localhost:2181

我正在使用以下命令启动 Kafka 服务器/代理:

bin/kafka-server-start.sh config/server.properties

所以我假设 Kafka 在我们启动 Kafka 服务器时会自动推断出 Zookeeper 的详细信息。如果是这样,那为什么我们需要在创建 Kafka 主题时明确提及 zookeeper 属性,其语法如下供您参考:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic 测试

根据 Kafka 文档,我们需要在启动 Kafka 服务器之前启动 zookeeper。所以我认为不能通过注释掉Kafka的server.properties文件中的zookeeper细节来启动Kafka

但至少我们可以使用 Kafka 来创建主题并启动 Kafka Producer/Consumer,而无需在各自的命令中明确提及 zookeeper 吗?

【问题讨论】:

    标签: apache-kafka apache-zookeeper kafka-consumer-api


    【解决方案1】:

    需要 Kafka 属性文件中的 zookeeper.connect 参数来让集群中的每个 Kafka 代理连接到 Zookeeper ensemble。 Zookeeper 将保留有关已连接代理和处理控制器选举的信息。除此之外,它还保存有关主题、配额和 ACL 等信息。

    When you use the kafka-topics.sh tool, the topic creation happens at Zookeeper level first and then thanks to it, information are propagated to Kafka brokers and topic partitions are created and assigned to them (thanks to the elected controller) .由于新的 Admin Client API 提供了一些直接针对 Kafka 代理执行的管理操作,因此未来将不再需要这种与 Zookeeper 的连接。例如,有一个已打开的 JIRA (https://issues.apache.org/jira/browse/KAFKA-5561),我正在努力让该工具使用此类 API 进行主题管理操作。

    关于生产者和消费者......生产者不需要连接到Zookeeper,而只有“旧”消费者(0.9.0版本之前)需要Zookeeper连接,因为它在那里保存了主题偏移量;从 0.9.0 版本开始,“新”消费者将主题偏移量保存在真实主题中(__consumer_offsets)。要使用它,您必须在命令行上使用 bootstrap-server 选项,而不是 zookeeper 选项。

    【讨论】:

    • 非常感谢@ppatierno 的详细解释 :-)
    猜你喜欢
    • 2016-02-04
    • 2016-06-13
    • 2017-11-13
    • 2017-07-29
    • 2015-08-07
    • 1970-01-01
    • 2018-07-22
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多