Kafkaisr错误更新

mpbci0fu  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(232)

我正面临一些与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上结束,这是真的吗?
在这两种情况下,使用

ls /brokers/ids

它只向我显示了代理1

stszievb

stszievb1#

您创建了以1作为复制因子的主题。这意味着每个分区只存在于一个代理上。
所以在您的示例中,如果您关闭代理0,t1-0将脱机,它的前导是-1(无),并且没有isr。在此阶段,没有客户端可以使用它来发送或接收消息。所以你上面粘贴的行为是预期的。
你描述的第一种行为是不正确的。由于您没有粘贴任何相关的输出,因此很难判断发生了什么。
如果希望在关闭1个代理时分区保持可用,则需要增加复制因子(在示例中为2)。

djmepvbi

djmepvbi2#

强调一下mickael所说的,复制因子不是分区将拥有的拷贝数,而不是前导拷贝数;复制因子是分区将拥有的副本总数,包括前导副本。
所以你在这里模仿的行为是正确的。每个分区只有一个副本(前导副本),如果相关代理发生故障,该分区将完全脱机,因此没有前导(-1)没有isr。

相关问题