副本和副本因子
Kafka 會為每個 Partition 創建多個副本。這些副本分布在不同的 Broker 上。副本確保了數據的冗余存儲,即使某個 Broker 宕機或失效,其他副本可以繼續提供服務。
副本因子指的是每個 Partition 有多少個副本。副本因子的設置決定了一個 Partition 會有多少個副本,默認情況下副本因子為 3,表示每個 Partition 有 3 個副本。
Kafka中的副本類型
Leader副本
每個 Partition 都有一個 Leader 副本,它負責處理所有的生產(寫入)和消費(讀取)請求。所有的生產者和消費者都與 Leader 副本交互,讀寫操作都通過 Leader 來完成。
Follower副本
其余副本為 Follower 副本,它們被動地從 Leader 副本同步數據。Follower 副本不會直接處理讀寫請求,只是復制 Leader 副本上的數據。
副本間的數據同步
Follower 副本通過 日志復制 從 Leader 副本獲取數據。Kafka 使用 Zookeeper(在新版的 Kafka 中,也可以使用 Kafka 自身的控制器機制)來協調 Leader 和 Follower 副本的同步。Follower 副本會從 Leader 副本拉取數據并存儲,確保副本數據一致。Kafka 提供了 同步復制 和 異步復制 機制。
同步復制
指的是在寫入數據時,Leader 副本會等待所有同步副本(包括 Follower 副本)確認已經成功接收到數據后,再向生產者返回成功響應。這種方式保證了數據的一致性,但可能會導致較高的延遲。
異步復制
Leader 副本在寫入數據后,可以立即返回給生產者,而不等待 Follower 副本的確認。這樣可以提高性能,但可能導致數據在某些副本未同步完成時發生故障的情況,造成數據丟失。
副本選舉(ISR機制)
Leader 副本會根據 ISR(In-Sync Replicas) 列表來決定哪些副本是最新的。如果 Leader 副本失敗,Kafka 會自動從 ISR 中選舉一個新的 Leader 副本,繼續處理請求,避免服務中斷。
ISR(In-Sync Replicas)
ISR表示當前與 Leader 副本保持同步的副本列表。所有同步副本都必須落后于 Leader 副本的數據最大延遲才能被視為 ISR。換句話說,ISR 列表中的副本必須在一定的時間窗口內完成數據的同步才能繼續作為可用副本。
副本追趕:如果某個 Follower 副本未能及時同步數據,它會被移出 ISR 列表。只有重新趕上 Leader 副本的數據之后,才能重新進入 ISR 列表。
ISR 保證了 Kafka 的數據一致性和容錯能力,只有處于 ISR 列表中的副本才有資格成為新的 Leader 副本。這樣,Kafka 可以確保即使發生 Broker 故障,也能快速恢復服務。