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

时间:2017-08-17 09:30:55

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

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

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

  

zookeeper.connect =本地主机: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    - 复制因子1 - 分区1 - 主题测试

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

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

1 个答案:

答案 0 :(得分:5)

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

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

关于生产者和消费者......生产者不需要连接到Zookeeper,而只有“旧”消费者(0.9.0版本之前)需要Zookeeper连接,因为它保存了主题偏移;从0.9.0版本开始,“新”消费者在真实主题中保存主题偏移(__consumer_offsets)。要使用它,您必须在zookeeper的命令行中使用library(visNetwork) id <- c(1,2,3,4,5,6,7,8,9) label <- c("All", "Cat", "Dog", "Rice","Fish", "Bread","Rice","Fish", "Bread") nodes <- data.frame(id, label, level = c( 1,2,2,3,3,3,3,3,3)) edges <- data.frame( from = c(1,1,2,2,2,3,3,3), to = c(2,3,4,5,6,7,8,9) ) visNetwork(nodes, edges, width = "100%",height = "800px") %>% visNodes(shape = "square") %>% visEdges(arrows = "to") %>% visInteraction(navigationButtons = TRUE)%>% visHierarchicalLayout(levelSeparation = 200) %>% visOptions(manipulation = TRUE) 选项。