有人可以在以下场景中解释 Kafka 中的同步复制因子维护:
设想:
- 考虑一下,最初我们的复制因子为 3。
- 在 Kafka 中,如果领导者出现故障,其中一个同步副本将成为新的领导者。
因此,对于新的领导者(同步副本之一),Kafka 是否再次保持复制因子为 3。
有人可以在以下场景中解释 Kafka 中的同步复制因子维护:
设想:
因此,对于新的领导者(同步副本之一),Kafka 是否再次保持复制因子为 3。
希望在 Kafka 符号上更加清晰:没有“同步复制因子”。每个主题都有一个“复制因子”和一个单独的“同步副本”列表(也称为ISR)。在一个健康的集群中,复制因子和同步副本的数量匹配,但是一旦一个代理崩溃,这些数字可能会偏离,因为您将拥有不同步的副本。
“所以,对于新的领导者(同步副本之一),Kafka 是否再次保持复制因子为 3。”
是(也不是)。Kafka 将坚持复制因子 3。但是,它希望崩溃的代理再次可用。在此期间,您的主题将有
因此,尽管您的复制因子为3
,但您的主题将有一个不同步的副本。
在代理重新启动之前,它现在取决于 KafkaProducer 配置acks
以及min.insync.replicas
生产者是否仍然可以成功地将数据写入主题。的描述min.insync.replicas
提供了更多细节:
“当生产者将确认设置为“全部”(或“-1”)时,min.insync.replicas 指定必须确认写入才能被视为成功的最小副本数。
Kafka 关于平衡领导的文档提供了分区领导发生的一些背景:
每当代理停止或崩溃时,该代理分区的领导权就会转移到其他副本。当代理重新启动时,它只会成为其所有分区的追随者,这意味着它不会用于客户端读取和写入。
为了避免这种不平衡,Kafka 有一个首选副本的概念。如果一个分区的副本列表是 1,5,9,则节点 1 比节点 5 或 9 更优先作为领导者,因为它在副本列表中更早。默认情况下,Kafka 集群将尝试将领导权恢复到已恢复的副本。此行为配置为:
auto.leader.rebalance.enable=true