[英]How to configure min.insync.replicas parameter on Spring Kafka Producer?
[英]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.