[英]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.