我正面临着一些与kafka相关的问题。我创建了一个带有2个分区和1个副本的主题来测试kafka行为。
kafka_2.10-0.9.0.0/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic t1检索与主题相关的数据时,我得到了以下信息:
kafka_2.10-0.9.0.0/bin/kafka-topics.sh --describe --topic t1 --zookeeper localhost:2181
Topic:t1 PartitionCount:2 ReplicationFactor:1 Configs:
Topic: t1 Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: t1 Partition: 1 Leader: 1 Replicas: 1 Isr: 1如果我关闭broker 0,有时主题相关的数据保持不变,即使从broker 1的日志中我可以看到字符串"successfully elected as leader",而其他时候它们的变化如下:
kafka_2.10-0.9.0.0/bin/kafka-topics.sh --describe --topic t1 --zookeeper
Topic:t1 PartitionCount:2 ReplicationFactor:1 Configs:
Topic: t1 Partition: 0 Leader: -1 Replicas: 0 Isr:
Topic: t1 Partition: 1 Leader: 1 Replicas: 1 Isr: 1确定第一种行为是错误的(因为ISR 0不存在)。预期的行为应该是什么?如果第二个是正确的,那么从那一刻起,所有发送的消息都将在分区1上结束,这是真的吗?
在这两种情况下,使用以下命令分析zookeper fs
ls /brokers/ids 它只向我显示了代理1
发布于 2018-01-19 01:42:46
您使用1作为复制因子创建了主题。这意味着每个分区只存在于一个代理上。
因此,在您的示例中,如果您关闭代理0,t1-0将变为离线,它的前导是-1 (无),并且它没有Isr。在此阶段,任何客户端都不能使用它来发送或接收消息。所以你上面粘贴的行为是意料之中的。
你描述的第一种行为是不正确的。因为您没有粘贴任何相关的输出,所以很难判断发生了什么。
如果您希望在关闭1个代理时分区保持可用,则需要增加复制因子(在您的示例中为2)。
发布于 2018-01-19 03:32:33
突出了Mickael所说的,复制因子不是您的分区将拥有的除引导者之外的副本的数量;复制因子是包括引导者的分区将具有的副本的总数。
所以你在这里复制的行为是正确的。每个分区只有一个副本(引导者),如果相关的代理宕机,该分区将完全脱机,因此没有引导者(-1)也没有ISR。
https://stackoverflow.com/questions/48326018
复制相似问题