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