首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kafka ISR错误更新

Kafka ISR错误更新
EN

Stack Overflow用户
提问于 2018-01-19 00:29:48
回答 2查看 819关注 0票数 1

我正面临着一些与kafka相关的问题。我创建了一个带有2个分区和1个副本的主题来测试kafka行为。

代码语言:javascript
复制
kafka_2.10-0.9.0.0/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic t1

检索与主题相关的数据时,我得到了以下信息:

代码语言:javascript
复制
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",而其他时候它们的变化如下:

代码语言:javascript
复制
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

代码语言:javascript
复制
ls /brokers/ids 

它只向我显示了代理1

EN

回答 2

Stack Overflow用户

发布于 2018-01-19 01:42:46

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

因此,在您的示例中,如果您关闭代理0,t1-0将变为离线,它的前导是-1 (无),并且它没有Isr。在此阶段,任何客户端都不能使用它来发送或接收消息。所以你上面粘贴的行为是意料之中的。

你描述的第一种行为是不正确的。因为您没有粘贴任何相关的输出,所以很难判断发生了什么。

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

票数 1
EN

Stack Overflow用户

发布于 2018-01-19 03:32:33

突出了Mickael所说的,复制因子不是您的分区将拥有的除引导者之外的副本的数量;复制因子是包括引导者的分区将具有的副本的总数。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48326018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档