Kafka ISR错误更新

时间:2018-01-18 16:29:48

标签: apache-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

如果我关闭经纪人0,有时主题相关数据保持不变,即使从经纪人1的日志中我可以看到字符串“已成功当选为    领导者“,而其他时候他们改变如下:

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

2 个答案:

答案 0 :(得分:1)

您创建了主题,其中1为复制因子。这意味着每个分区仅存在于1个代理上。

所以在你的例子中,如果你取消经纪人0,t1-0变为离线,其领导者是-1(无)并且它没有Isr。在此阶段,没有客户端可以使用它来发送或接收消息。所以你上面粘贴的行为是预料之中的。

您描述的第一个行为是不正确的。由于您没有粘贴任何相关输出,因此很难说清楚发生了什么。

如果您希望在关闭1个代理时分区保持可用,则需要增加复制因子(在您的示例中为2)。

答案 1 :(得分:0)

突出Mickael所说的,复制因子不是你的分区除了领导者之外的副本数量;复制因子是分区将包含的副本的总数。

所以你在这里复制的行为是正确的。每个分区只有一个副本(领导者一个),如果相关代理发生故障,分区完全脱机,因此没有领导者(-1)没有ISR。