繁体   English   中英

故障转移如何在 kafka 中与保持复制因子一起工作

[英]How failover works in kafka along with keeping up replication factor

我试图了解故障转移和复制因素在 kafka 中是如何工作的。

假设我的集群有 3 个代理,复制因子也是 3。在这种情况下,每个代理将拥有一份分区副本,其中一个代理是领导者。 如果领导代理失败,那么其中一个跟随代理将成为领导,但现在复制因子降至 2。此时如果我在集群中添加一个新代理,kafka 将确保复制因子为 3 并复制新经纪人所需的数据。

如果我的集群已经有一个附加代理,上述场景将如何工作。

省略分区(这是 Kafka 的另一个概念):

复制因子不是说一个主题复制了多少次,而是它应该被复制多少次。 它不受经纪人关闭的影响。

一旦领导者代理关闭,“领导者”状态就会转移到另一个同步的代理,这意味着复制了当前状态并且不落后的代理。 为不同步的代理选择“领导者”状态显然会导致数据丢失,因此这永远不会发生(使用正确的设置时)。

这些符合“领导地位”的副本称为同步副本(ISR) ,这很重要,因为有一个名为min.insync.replicas的配置,它指定必须存在多少个 ISR 才能确认 Kafka 消息。 如果将其设置为 0,则每条 Kafka 消息一进入“领导”代理就被确认为“成功”,如果该代理死亡,则所有尚未复制的数据都将丢失。 如果将min.insync.replicas设置为 1,则每条消息都会等待确认,直到至少存在 1 个副本才能“成功”,因此如果代理现在死亡,则会有一个副本覆盖此数据。 如果没有足够的代理来覆盖最小数量的副本,您的集群最终将失败。

所以回答你的问题:如果你有 2 个正在运行的代理, min.insync.replicas=1 (默认)和 3 的复制因子,你的集群运行良好,并且会在你启动另一个代理后立即添加一个副本。 如果 2 个经纪人中的另一个在您启动第三个经纪人之前死亡,您将遇到问题。

在您的设置中(3 个代理,3 个副本),当 1 个代理失败时,Kafka 将自动为其领导者在失败的代理上的所有分区选举新的领导者(在剩余的代理上)。

复制因子不会改变。 复制因子是一种只能由用户更改的主题配置。

同样,副本列表不会更改。 这列出了应该托管每个分区的代理。

但是,In Sync Replicas (ISR) 列表将更改并且仅包含剩余的 2 个代理。

如果您向集群添加另一个代理,会发生什么取决于它的broker.id

  • 如果broker.id与失败的 broker 相同,则这个新 broker 将开始复制数据并最终加入所有现有分区的 ISR。
  • 如果它使用不同的broker.id ,则不会发生任何事情。 您将能够使用 3 个副本创建新主题(只有 2 个代理时这是不可能的),但 Kafka 不会自动复制现有分区。 如果需要,您可以手动触发重新分配,请参阅文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM