我刚刚开始学习kafka,我正在关注文档的介绍部分。 据我所知,命令"描述"应该表明分区中有多少个副本存活且很好。来自文档
" ISR"是"同步"副本。这是该的子集 当前活着并且被领导者抓住的复制品清单。
但在关闭所有节点(zookeeper仍在运行)并运行describe:
之后$ bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test-replicated
我得到以下结果:似乎表明nbroker 2有一个活着的分区?
Topic:test-replicated PartitionCount:1 ReplicationFactor:3 Configs:
Topic: test-replicated Partition: 0 Leader: 2 Replicas: 1,2,0 Isr: 2
有人可以向我解释原因吗?也许我误解了关于卡夫卡的事情?
注意到在重新启动我的节点0
之后,同一cmd的输出现在表明经纪人" 0"是一个活着和工作的分区的所有者。这是否意味着当没有节点存活时,显示的代理是最后一个在所有节点都停止之前运行的节点?
Topic:test-replicated PartitionCount:1 ReplicationFactor:3 Configs:
Topic: test-replicated Partition: 0 Leader: 0 Replicas: 1,2,0 Isr: 0
答案 0 :(得分:2)
主题详细信息的数据来自Zookeeper,因此无需连接到Kafka经纪人。特定分区的信息通常存储在znode(/ brokers / topics / topicname / partitions / partition-number)中。它们由Kafka集群中的控制器更新。通常,首先启动的Kafka服务器将成为控制器(直到它关闭或失去与Zookeeper的联系)。当您关闭Kafka群集时,所有主题详细信息仍将保留在Zookeeper中,并且由于控制器节点也已关闭,因此不会更新任何人。因此,您将继续看到"陈旧"来自kafka-topics.sh命令的主题分区详细信息。 一旦服务器再次启动,它就会成为控制器,它将检测哪些节点已启动,哪些节点已关闭,它将更新zookeeper中的信息。