繁体   English   中英

Kafka min.insync.replicas < replication.factor

[英]Kafka min.insync.replicas < replication.factor

假设我有一个包含 3 个 kafka 代理的集群。 我设置:

min.insync.replicas=2
default.replication.factor=3
  • 所有代理都已启动,ISR 正常,我收到一条消息,其中ack=all 由于ISR=2 ,消息的两个副本肯定会被存储。 1)是否会在后台制作一份副本(因为replication=3)? 2)如果失败了——没关系,对吗? 集群运行状况良好。

  • 一个broker挂了,可以维持ISR=2 ,消息保存到两个broker。 一段时间后,那个挂掉的经纪人又出现了。 3) 因为replication=3,它会在后台追上其他人吗?

我试图找出一个实际的例子,在这个例子中,将复制因子设置为大于 ISR 是有意义的。 一个我可以“触摸”和理解的真实例子。 如果这是重复的,请让我参考。 谢谢你。

是的,一个复制品是在后台制作的。

是的,代理将在重新启动时赶上所有不同步的副本。

如果你有同步副本 <= 复制因子,那么你就不会丢失任何代理(由于维护或故障)。 因此,复制因子应该总是更大

另一个答案绝对正确,但我花了很长时间才弄明白。 恕我直言,这在某种程度上是微妙的,虽然我的理解可能在这里和那里有点不正确,但它有助于建立一个心理 model 正在发生的事情。

假设我有一个由 3 个经纪人组成的集群:

[a, b, c]  ->  brokers
[a, b]     -> ISR
[a, b, c]  -> RF

我能容忍多少经纪人倒下? 答案是 1。

  • 如果丢失代理“c”,ISR 仍然可以得到满足,集群将正常工作。

  • 如果我失去了经纪人“a”(如果我失去了“b”,解释是一样的),则必须进行再平衡。 在我从 ISR 中丢失一个之前,zookeeper 会询问哪些代理处于同步状态(谁满足 RF)。 好吧,RF = a, b, c 中有 3 个部分。由于我丢失了“a”,所以现在剩下两个是同步的:“b”和“c”。 必须进行领导选举,ISR 将对“b”和“c”感到满意。

  • 这意味着我可以从集群中丢失任何一个代理,但仍然可以正常工作。 这在这里可能微不足道,但下一个例子并不是那么多,恕我直言。


假设我有一个包含 5 个代理的(人工示例)集群:

[a, b, c, d, e]  -> brokers
[a, b]           -> ISR
[a, b, c]        -> RF

我现在可以容忍多少经纪人倒闭? 最初我以为是 2,但这不正确。

  • 如果我丢失了“d”和“e”,很简单,集群将继续正常工作。

  • 如果失去“a”和“b”,理论上必须发生重新平衡。 但是在我丢失“a”和“b”之前哪些经纪人是 RF 的一部分,或者哪些经纪人是同步的? [a, b, c]。 如果其中两个代理出现故障,则无法满足 ISR。

  • 这意味着我不能容忍任何两个代理宕机,这意味着这个设置对于任何2 个代理宕机并不是真正的容错。

  • 如果我的设置不同,它只能容忍两个经纪人倒下:

     5 -> brokers 3 -> ISR 5 -> RF

这就是另一个答案正确且完全有意义的地方:

如果你有同步副本 <= 复制因子,那么你不能丢失任何代理超过值之间的差异

暂无
暂无

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

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