【问题标题】:Kafka ISR wrongly updateKafka ISR 错误更新
【发布时间】:2023-03-22 10:20:02
【问题描述】:

我遇到了一些与 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,有时与主题相关的数据保持相同 领导者”,而其他时候他们的变化如下:

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

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

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

    因此,在您的示例中,如果您关闭代理 0,t1-0 将变为离线,其领导者为 -1(无)并且它没有 Isr。在这个阶段,没有客户端可以使用它来发送或接收消息。因此,您在上面粘贴的行为是预期的。

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

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

    【讨论】:

      【解决方案2】:

      强调 Mickael 所说的,复制因素不是您的分区将拥有的副本数量,而不是领导者副本;复制因子是分区将拥有的副本总数,包括领导者。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 2023-02-09
        • 2021-09-29
        • 1970-01-01
        • 2021-04-10
        相关资源
        最近更新 更多