2 Kafka 基本結(jié)構(gòu)(Kafka 0.11.0.2)

此處內(nèi)容來自書籍Apache Kafka 實戰(zhàn)一書(作者胡夕)

1Kafka Zookeeper路徑

Kafka中使用到的各個Zookeeper節(jié)點, 路徑如下圖,

image.png

即:


image.png

2副本和ISR

什么是分區(qū)?
Kafka分區(qū)本質(zhì)上就是一個備份日志, 即利用多份相同的備份共同提供冗余來保持系統(tǒng)高可用性.

什么是副本?
為了保持高可用的備份就是副本.

什么是ISR?
ISR實際上就是Kafka集群動態(tài)維護(hù)的一組同步副本集合(in-sync replicas), 這句話可以讀出來ISR是副本集合, 是與Leader保持同步的副本集合.
實際上每個topic分區(qū)(注意是每個分區(qū)) 都有自己的ISR列表, ISR的所有副本都與leader保持同步狀態(tài), leader副本總是包含在ISR中的, 只有ISR中的副本才有資格被選舉為leader.

什么情況下消息才是已提交?
producer寫入的消息只有被ISR中的所有副本都接受到才被看成是已提交狀態(tài).

高可用能力:
根據(jù)ISR的解釋, 可以知道假設(shè)ISR集合有N個副本, 那么此分區(qū)最多可以忍受N-1個副本崩潰而不丟失已提交消息.

2.1 follower副本同步

副本各種位置信息

leader副本對外提供服務(wù)(讀寫), follower副本僅僅只做向leader副本請求數(shù)據(jù), 從而保持與leader副本的同步.
上圖中的幾個位移:

  • 起始位移(base offset): 表示該副本當(dāng)前所含第一條消息的offset
  • 高水印值(high watermark, HW): 副本高水印值, 它保存了該副本最新一條已提交消息的位移.leader分區(qū)的HW值確定了Consumer能夠獲取的消息上線, 超過HW值的所有消息都被視為"未提交成功的消息", consumer是看不到的. 另外需要注意的是除了leader副本有HW值之外其他follower副本也都有HW值, 不過只有l(wèi)eader副本的HW值才能決定clients的consumer能夠看到的消息數(shù)量罷了.
  • 日志末端位移(log end offset, LEO): 副本日志下一條待寫入消息的offset, 比如此處的LEO是10, 說明(0-9)這10條消息是寫入的, 下一條消息寫入的位移將是序號10. 只有ISR列表中的所有副本都更新了對應(yīng)的LEO之后, leader副本才會向右移動HW值 表名消息寫入成功.
    上面可以看到HW和LEO這兩個值很重要, 但是這兩個值leader副本與follower副本更新的方式不太一樣.

2.1.1 LEO更新機制

  • 1 Leader副本端的LEO更新:
    leader寫log時就會自動更新它自己的LEO值.
  • 2 Follower更新LEO值:
    follower副本只是被動地向leader副本請求數(shù)據(jù), 具體表現(xiàn)為follower副本不停地向leader副本所在的broker發(fā)送FETCH請求, 一旦獲取消息, 便寫入自己的日志中進(jìn)行備份.

Kafka針對follower副本LEO的更新有兩部分:

  • LEO值保存在follower副本所在broker的緩存上
  • LEO值保存在leader副本所在broker的緩存上. 此處可以理解出leader副本所在機器的緩存上保存了該分區(qū)下所有follower副本的LEO屬性值(當(dāng)然也包括它自己的LEO)
    之所以有兩套是因為前者用于幫助follower副本自身更新HW值, 而同時還需要使用后者來確定leader副本的HW值即分區(qū)HW
    (1)follower副本端的follower副本LEO何時更新?
    在follower發(fā)送FETCH請求后, leader將數(shù)據(jù)返回給follower, 此時follower開始向底層log寫數(shù)據(jù), 從而自動更新其LEO值.
    (2)leader副本端的follower副本LEO何時更新?
    leader副本段的follower副本LEO的更新發(fā)生在leader處理follower FETCH請求時,一旦leader接收到follower發(fā)送的FETCH請求, 它首先會從自己的log中讀取相應(yīng)的數(shù)據(jù), 但是在給follower返回數(shù)據(jù)之前它先會去更新follower的LEO(即上面所說的第二套LEO值)

2.1.2 HW更新機制

  • 1 follower副本端更新HW
    follower更新HW發(fā)生在其更新LEO之后, 一旦follower向log寫完數(shù)據(jù), 它就會嘗試更新HW值. 具體算法即比較當(dāng)前LEO值與FETCH響應(yīng)中l(wèi)eader的HW值, 取兩者之間的最小值作為新的HW值. 因此: 如果follower的LEO值超過了leader的HW值, 那么follower的HW值是不會越過leader HW值的.

  • 2 leader副本端更新HW
    learder副本端的HW值很重要, 因為它直接影響了分區(qū)數(shù)據(jù)相對于consumer 客戶端的可見性.
    leader副本端的HW值的更新 分為正常情況與異常情況兩種:
    (1) 正常情況下的更新場景:
    A, producer向leader副本寫入消息時: 因為寫入消息會更新leader的LEO,, 故有必要再查看HW值是否也需要更新
    B, leader處理follower FETCH 請求時: 當(dāng)leader處理follower的FETCH請求時, 首先會從底層的log讀取數(shù)據(jù), 之后再嘗試更新分區(qū)HW值

(2)異常情況下的更新場景:
A, 副本成為leader副本時: 當(dāng)某個副本成為分區(qū)的leader副本, Kafka會嘗試更新分區(qū)HW. 畢竟分區(qū)leader都發(fā)生了變更, 這個副本的狀態(tài)是一定要檢查的.
B, broker出現(xiàn)崩潰導(dǎo)致副本被剔除ISR時: 若有broker崩潰, 則必須查看是否會波及此分區(qū)(有可能此分區(qū)leader就在這個broker上), 因此檢查分區(qū)HW值是否需要更新是有必要的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舞虱,更是在濱河造成了極大的恐慌,老刑警劉巖当窗,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杉编,居然都是意外死亡超全,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門邓馒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘶朱,“玉大人,你說我怎么就攤上這事光酣∈瓒簦” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵救军,是天一觀的道長财异。 經(jīng)常有香客問我,道長唱遭,這世上最難降的妖魔是什么戳寸? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮拷泽,結(jié)果婚禮上疫鹊,老公的妹妹穿的比我還像新娘。我一直安慰自己司致,他們只是感情好拆吆,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脂矫,像睡著了一般枣耀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庭再,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天捞奕,我揣著相機與錄音牺堰,去河邊找鬼。 笑死颅围,一個胖子當(dāng)著我的面吹牛萌焰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谷浅,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奶卓!你這毒婦竟也來了一疯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤夺姑,失蹤者是張志新(化名)和其女友劉穎墩邀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盏浙,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡眉睹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了废膘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竹海。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丐黄,靈堂內(nèi)的尸體忽然破棺而出斋配,到底是詐尸還是另有隱情,我是刑警寧澤灌闺,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布艰争,位于F島的核電站,受9級特大地震影響桂对,放射性物質(zhì)發(fā)生泄漏甩卓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一蕉斜、第九天 我趴在偏房一處隱蔽的房頂上張望逾柿。 院中可真熱鬧,春花似錦蛛勉、人聲如沸鹿寻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毡熏。三九已至,卻和暖如春侣诵,著一層夾襖步出監(jiān)牢的瞬間痢法,已是汗流浹背狱窘。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留财搁,地道東北人蘸炸。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像尖奔,于是被迫代替她去往敵國和親搭儒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容