所謂副本(replica),本質就是乙個只能追加寫訊息的提交日誌。根據 kafka 副本機制的定義,kafka 是有主題概念的,而每個主題又進一步劃分成若干個分割槽。副本的概念實際上是在分割槽層級下定義的,每個分割槽配置有若干個副本。同乙個分割槽下的所有副本儲存有相同的訊息序列,這些副本分散儲存在不同的 broker 上,所以每台 broker 都可能儲存有各個主題下不同分割槽的不同副本,從而能夠對抗部分 broker 宕機帶來的資料不可用。
副本機制(replication),也可以稱之為備份機制,通常是指分布式系統在多台網路互聯的機器上儲存有相同的資料拷貝。副本機制優勢:
提供資料冗餘。即使系統部分元件失效,系統依然能夠繼續運轉,因而增加了整體可用性以及資料永續性。
提供高伸縮性。支援橫向擴充套件,能夠通過增加機器的方式來提公升讀效能,進而提高讀操作吞吐量。
改善資料區域性性。允許將資料放入與使用者地理位置相近的地方,從而降低系統延時。
apache kafka 副本是 基於領導者(leader-based)的副本機制。第一,在 kafka 中,副本分成兩類:領導者副本(leader replica)和追隨者副本(follower replica)。每個分割槽在建立時都要選舉乙個副本,稱為領導者副本,其餘的副本自動稱為追隨者副本。
第二,kafka 的副本機制比其他分布式系統要更嚴格一些。在 kafka 中,
追隨者副本是不對外提供服務的[2.4.0 以後支援]。這就是說,任何乙個追隨者副本都不能響應消費者和生產者的讀寫請求。所有的請求都必須由領導者副本來處理,或者說,所有的讀寫請求都必須發往領導者副本所在的 broker,由該 broker 負責處理。追隨者副本不處理客戶端請求,它唯一的任務就是從領導者副本非同步拉取訊息,並寫入到自己的提交日誌中,從而實現與領導者副本的同步。
第三,當領導者副本掛掉了,或者說領導者副本所在的 broker 宕機時,kafka 依託於 zookeeper 提供的監控功能能夠實時感知到,並立即開啟新一輪的領導者選舉,從追隨者副本中選乙個作為新的領導者。老 leader 副本重啟回來後,只能作為追隨者副本加入到集群中。
當你使用生產者 api 向 kafka 成功寫入訊息後,馬上使用消費者 api 去讀取剛才生產的訊息。如果允許追隨者副本對外提供服務,由於副本同步是非同步的,因此有可能出現追隨者副本還沒有從領導者副本那裡拉取到最新的訊息,從而使得客戶端看不到最新寫入的訊息。
對於乙個消費者使用者而言,在多次消費訊息時,它不會看到某條訊息一會兒存在一會兒不存在。
允許追隨者副本提供讀服務,那麼假設當前有 2 個追隨者副本 f1 和 f2,它們非同步地拉取領導者副本資料。倘若 f1 拉取了 leader 的最新訊息而 f2 還未及時拉取,那麼,此時如果有乙個消費者先從 f1 讀取訊息之後又從 f2 拉取訊息,它可能會看到這樣的現象:第一次消費時看到的最新訊息在第二次消費時不見了,這就不是單調讀一致性。但是,如果所有的讀請求都是由 leader 來處理,那麼 kafka 就很容易實現單調讀一致性。
isr 中的副本都是與 leader 同步的副本,相反,不在 isr 中的追隨者副本就被認為是與 leader 不同步的。
leader 副本天然就在 isr 中。也就是說,isr 不只是追隨者副本集合,它必然包括 leader 副本。甚至在某些情況下,isr 只有 leader 這乙個副本。
kafka 判斷 follower 是否與 leader 同步的標準:broker 端引數 replica.lag.time.max.ms 引數值。這個引數的含義是 follower 副本能夠落後 leader 副本的最長時間間隔,當前預設值是 10 秒。只要乙個 follower 副本落後 leader 副本的時間不連續超過 10 秒,那麼 kafka 就認為該 follower 副本與 leader 是同步的,即使此時 follower 副本中儲存的訊息明顯少於 leader 副本中的訊息。follower 副本唯一的工作就是不斷地從 leader 副本拉取訊息,然後寫入到自己的提交日誌中。如果這個同步過程的速度持續慢於 leader 副本的訊息寫入速度,那麼在 replica.lag.time.max.ms 時間後,此 follower 副本就會被認為是與 leader 副本不同步的,因此不能再放入 isr 中。此時,kafka 會自動收縮 isr 集合,將該副本「踢出」isr。倘若該副本後面慢慢地追上了 leader 的進度,那麼它是能夠重新被加回 isr 的。isr 為空。因為 leader 副本天然就在 isr 中,如果 isr 為空了,就說明 leader 副本也「掛掉」了,kafka 需要重新選舉乙個新的 leader。可是 isr 是空,此時該怎麼選舉新 leader呢?kafka 把所有不在 isr 中的存活副本都稱為非同步副本。通常來說,非同步副本落後 leader 太多,因此,如果選擇這些副本作為新 leader,就可能出現資料的丟失。畢竟,這些副本中儲存的訊息遠遠落後於老 leader 中的訊息。在 kafka 中,選舉這種副本的過程稱為 unclean 領導者選舉。broker 端引數 unclean.leader.election.enable 控制是否允許 unclean 領導者選舉。
開啟 unclean 領導者選舉可能會造成資料丟失,但好處是,它使得分割槽 leader 副本一直存在,不至於停止對外提供服務,因此提公升了高可用性。反之,禁止 unclean 領導者選舉的好處在於維護了資料的一致性,避免了訊息丟失,但犧牲了高可用性。
引用:kafka核心技術與實戰 - 胡夕
kafka 副本機制
kafka通過副本機制保證資料的可靠性 一.副本機制的概念如下 1.乙個partition有多個副本replication,一般是3個或5個 2.每個副本位於不通的broker 3.每個副本集合裡有乙個leader副本,其餘的為follower副本,只有leader副本才接受讀寫請求,followe...
kafka分割槽和副本機制驗證
目前使用kafka集群,但是由於資料量還行,就不想使用太多的分割槽,所以只想弄乙個分割槽,網上資料看了一大堆,基本都是些理論和囉嗦,於是乎自己手動來驗證下這個情況的好壞。假設是三颱機器的kafka集群,建立乙個主題one fb1 fq1,指定副本數1和分割槽數1,命令 bin kafka topic...
HDFS的副本機制 副本機制的過程
hdfs的副本機制 快速恢復能力 副本機制 保證資料的容錯性 因為datanode上的資料是會丟失的,存第一塊的時候,又複製出一塊存放在其他兩個節點上,存放的相當於副本 假如說node1機器宕機了,其他的機器是有存放node1的block副本,即使node1宕機也不影響資料的完整性的 a.txt 在...