首页 文章

为什么我们需要提到Zookeeper的详细信息,即使Apache Kafka配置文件已经有了它?

提问于
浏览
3

我在(Plain Vanilla)Hadoop集群中使用Apache Kafka过去几个月,出于好奇,我问这个问题 . 只是为了获得有关它的额外知识 .

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

zookeeper.connect = localhost:2181

我使用以下命令启动Kafka Server / Broker:

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

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

bin / kafka-topics.sh --create --zookeeper localhost:2181 --rerelication-factor 1 --partitions 1 --topic test

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

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

1 回答

  • 4

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

    当您使用kafka-topics.sh工具时,主题创建首先在Zookeeper级别进行,然后由于它,信息被传播到Kafka代理并创建主题分区并分配给它们(由于选择的控制器) . 由于新的Admin Client API提供了一些直接针对Kafka代理执行的管理操作,因此将来不再需要与Zookeeper的连接 . 例如,有一个打开的JIRA(https://issues.apache.org/jira/browse/KAFKA-5561),我正在努力使该工具使用这样的API进行主题管理操作 .

    关于 生产环境 者和消费者...... 生产环境 者不需要连接到Zookeeper,而只有"old"消费者(0.9.0版之前)需要Zookeeper连接,因为它保存了主题偏移;从0.9.0版本开始,"new"使用者在实际主题中保存主题偏移(__consumer_offsets) . 要使用它,您必须在 zookeeper 的命令行中使用 bootstrap-server 选项 .

相关问题