《Apache Kafka 實戰(zhàn)》筆記 - 6.1 leader 與 follower 的同步流程

一個副本就是一個備份日志,多個副本提供冗余保持系統(tǒng)高可用性,多個副本均勻分布在所有broker上,從這些副本中選一個leader出來對外提供服務(wù),其他的副本叫做follower,被動的向leader請求數(shù)據(jù),保持同步,如果leader沒問題,就用不到follower,如果leader崩潰了,就從follower中選舉一個新的leader出來,競選leader也是需要資格的,如果follower與leader的進度差距比較大,那就不能參加競選,哪些follower可以競選?這就引出了ISR概念。

ISR是一組follower,是一組同步副本集合。每個分區(qū)都有自己的一個ISR列表,ISR中的副本都與leader保持同步。leader就在ISR中。producer寫入一條消息時,只有被ISR成員都接收到,才是為寫入成功。

重要概念

  • 起始位置(base offset):該副本第一條消息的 offset。
  • 高水印值(HW,high watermark):高位水印,指該副本最新一條已提交消息的 offset。超過 HW 的消息都是“未完全備份的”,consumer 是看不到的。
  • 末端位置(LEO,log end offset):結(jié)束位移,就是副本日志中下一條代寫入消息的 offset。

同步流程說明

假設(shè)一個 topic,只要一個分區(qū),有3個副本(1個leader, 2個follower),ISR中也是這3個副本,目前 topic 是空的,3個副本的 LEO 和 HW 的值都是 0。

現(xiàn)在 producer 向 leader 副本發(fā)送了一條消息,下面看一下消息的整個同步流程:

(1)leader 接收到消息,把自己的 LEO 值更新為 1。
(2)2個 follower 各自發(fā)請求給 leader。
(3)leader 把消息推送給 follower。
(4)follower 接收到消息后,更新自己的 LEO 為 1。
(5)leader 接收到 follower 的響應(yīng)之后,HW 值更新為 1,此時 offset 為 0 的這條消息可以被 consumer 消費了。

對于設(shè)置了 acks=-1 的 producer,只有這5步都完成了,producer 才能正常返回,標志著這條消息發(fā)送成功。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容