Kafka故障转移和副本

4
假设我有一个由3个Kafka代理和3个Zookeeper组成的Kafka集群。
我有一个单一的主题“accountsTopic”,其设置为“复制因子为3”和“ISR为2”。
如果Leader死亡,Kafka将选举ISR作为Leader,但第三个节点(假设不是ISR)是否会在这种2节点故障转移设置中充当当前Leader的ISR?
1个回答

3
当领袖死亡时会发生什么取决于您的配置。
默认情况下 自0.11版本以来, 只有一个同步副本可以被选举为领袖。如果没有副本处于同步状态,则分区将离线。这更偏向于一致性而不是可用性。
您可以在经纪人上设置 unclean.leader.election.enable=true,在这种情况下,如果没有副本处于同步状态,则会选择其中一个不同步的副本。这可能会导致数据丢失,但更偏向于可用性。当然,如果有一些副本处于同步状态,它仍将选举其中之一。

如果问题不清楚,我的acks设置将始终确保在提交消息之前将ISR副本写入。因此,简而言之,在我的情况下,我将始终为干净的领导者选举拥有一个ISR副本。但是,我想了解新领导者选举后Non-ISR代理会发生什么?它是否会追赶并成为新领导者的ISR - Divs
1
一个失步的副本总是试图通过从领导者获取数据来重新同步。如果领导者发生变化,它将尝试从新的领导者赶上。 - Mickael Maison
谢谢。它肯定会尝试追赶,但是当新领导者发生write时,是否保证第三个将成为新领导者的ISR,以便对新领导者的写入仅在第三个成功写入时被视为已提交? - Divs
我认为你对ISR的含义有些混淆。ISR代表同步副本。当一个broker从leader那里复制了所有消息,它就是同步的。所以,是的,一旦第三个broker赶上了新的leader,它就会成为ISR。关于写入,这取决于你的设置。使用acks=all时,所有ISR broker需要复制该消息才能被视为成功发送。但是,根据min.insync.replicas和topic的复制因子,可能需要不同数量的broker。请参阅经纪人配置文档。 - Mickael Maison
@MickaelMaison 在我的测试中,使用3个Broker,复制因子为2,最小ISR为2,ack为1。当broker 0宕机时,分区仍然保留1个ISR,因此不允许写入,会出现NotEnoughReplicasException。另一个剩余的Broker会成为ISR吗?需要多长时间? 你在这里提到Kafka在Broker宕机后不会创建新的副本 - Girish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接