簡體   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