Kafka描述cmd总是返回至少一个活动分区

时间:2016-09-11 14:24:30

标签: apache-kafka apache-zookeeper

我刚刚开始学习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

1 个答案:

答案 0 :(得分:2)

主题详细信息的数据来自Zookeeper,因此无需连接到Kafka经纪人。特定分区的信息通常存储在znode(/ brokers / topics / topicname / partitions / partition-number)中。它们由Kafka集群中的控制器更新。通常,首先启动的Kafka服务器将成为控制器(直到它关闭或失去与Zookeeper的联系)。当您关闭Kafka群集时,所有主题详细信息仍将保留在Zookeeper中,并且由于控制器节点也已关闭,因此不会更新任何人。因此,您将继续看到"陈旧"来自kafka-topics.sh命令的主题分区详细信息。 一旦服务器再次启动,它就会成为控制器,它将检测哪些节点已启动,哪些节点已关闭,它将更新zookeeper中的信息。