我在(普通香草)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吗?
答案 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)
选项。