kafka學(xué)習(xí)筆記

at least once //重試
at most once //seq id (冥等性)
exactly once // 重試+冥等性

//atomic writes across partitions
1 從transaction coordinator 獲取事務(wù)ID(事務(wù)信息和狀態(tài)需要持久化到topic中 如果transaction coordinator掛了 用來做事務(wù)回復(fù))
2 寫message到leader partition中(如果是事務(wù)消息 通過消息頭部的messageType來判斷是事務(wù)消息還是普通消息)3
3 更新transaction coordinator中的事務(wù)狀態(tài)(commit or abort)
4 transaction coordinator寫Marker(事務(wù)的元數(shù)據(jù) commit or abort)到leader topic中 更新LSO(Last Stable Offset LSO之后的offset對consumer不可見)
5 如果事務(wù)abort了 leader partition 把失敗的元數(shù)據(jù)寫到abort transaction的信息文件中
6 consumer消費時 如果message是事務(wù)消息 而且在abort transaction中 丟棄這個消息
7 如果在write Marker過程中 某個broker掛了就重寫 write-Marker是at least once消息 有重復(fù)也無所謂

文件存儲
segment file 組成:有兩大部分組成 分別為index file 和data file, 此兩個文件一一對應(yīng),后綴".index"和".log"分別表示segment的索引文件和數(shù)據(jù)文件夺蛇。索引文件存儲消息的元數(shù)據(jù)卡乾,log文件存儲消息的內(nèi)容。
segment的命名規(guī)則:partion全局的第一個segment從0開始信卡,后續(xù)每個segment文件名為上一個segment文件最后一條消息的offset隔缀,數(shù)值最大為64位,19位數(shù)字字符長度傍菇,沒有用0填充
以100.indx和100.log的文件為例


c415ed42.png

100.index 100.log
{1, 0} {(message101, 0), (message102, 239)}
{3, 500} {(message103, 500), (message104, 589), (message105, 666), (message106, 700)}
{7, 739} {(message107, 739)}
... ...
{N, postion} message100+N postion

{消息在本文件的系列號猾瘸, 消息在log的物理偏移地址} {消息的全局系列號 物理偏移地址}
如何查找offset為107的message 根據(jù)文件名查找到對應(yīng)的100的segment file。依次定位到100.index的元數(shù)據(jù)物理位置和100.log的物理偏移地址

Isr
Kafka結(jié)合同步復(fù)制和異步復(fù)制丢习,使用ISR(與Partition Leader保持同步的Replica列表)的方式在確保數(shù)據(jù)不丟失和吞吐率之間做了平衡须妻。Producer只需把消息發(fā)送到Partition Leader,Leader將消息寫入本地Log泛领。Follower則從Leader pull數(shù)據(jù)荒吏。Follower在收到該消息向Leader發(fā)送ACK。一旦Leader收到了ISR中所有Replica的ACK渊鞋,該消息就被認為已經(jīng)commit了绰更,Leader將增加HW并且向Producer發(fā)送ACK。這樣如果leader掛了锡宋,只要Isr中有一個replica存活儡湾,就不會丟數(shù)據(jù)。

Isr動態(tài)更新
Leader會跟蹤ISR执俩,如果ISR中一個Follower宕機徐钠,或者落后太多,Leader將把它從ISR中移除役首。這里所描述的“落后太多”指Follower復(fù)制的消息落后于Leader后的條數(shù)超過預(yù)定值(replica.lag.max.messages)或者Follower超過一定時間(replica.lag.time.max.ms)未向Leader發(fā)送fetch請求尝丐。ISR是AR中的一個子集显拜,由leader維護ISR列表。Kafka的ISR的管理最終都會反饋到Zookeeper節(jié)點上爹袁。具體位置為:/brokers/topics/[topic]/partitions/[partition]/state远荠。目前有兩個地方會對這個Zookeeper的節(jié)點進行維護。
Controller來維護:Kafka集群中的其中一個Broker會被選舉為Controller失息,主要負責(zé)Partition管理和副本狀態(tài)管理譬淳,也會執(zhí)行類似于重分配partition之類的管理任務(wù)。在符合某些特定條件下盹兢,Controller下的LeaderSelector會選舉新的leader邻梆,ISR和新的leader_epoch及controller_epoch寫入Zookeeper的相關(guān)節(jié)點中。同時發(fā)起LeaderAndIsrRequest通知所有的replicas绎秒。
Leader來維護:leader有單獨的線程定期檢測ISR中follower是否脫離ISR, 如果發(fā)現(xiàn)ISR變化确虱,則會將新的ISR的信息返回到Zookeeper的相關(guān)節(jié)點中。

選舉機制
kafka中所有topic的leader選舉都有controller負責(zé)替裆。在所有的broker中選擇一個作為controller校辩,controller通過rpc的方式叫l(wèi)eader的變更通知broker。 controller的選舉則依賴zookeeper辆童,每個broker啟動的時候都嘗試去zookeeper上創(chuàng)建一個臨時節(jié)點宜咒,只有創(chuàng)建成功的broker才是controller,其他的broker則watch改節(jié)點把鉴,防止controller宕機后故黑,執(zhí)行重新選舉新的controller。
controller_epoch:此值為一個數(shù)字,kafka集群中第一個broker第一次啟動時為1庭砍,以后只要集群中center controller中央控制器所在broker變更或掛掉场晶,就會重新選舉新的center controller,每次center controller變更controller_epoch值就會 + 1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怠缸,一起剝皮案震驚了整個濱河市诗轻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌揭北,老刑警劉巖扳炬,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搔体,居然都是意外死亡恨樟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門疚俱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劝术,“玉大人,你說我怎么就攤上這事⊙” “怎么了衬吆?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匙握。 經(jīng)常有香客問我,道長陈轿,這世上最難降的妖魔是什么圈纺? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮麦射,結(jié)果婚禮上蛾娶,老公的妹妹穿的比我還像新娘。我一直安慰自己潜秋,他們只是感情好蛔琅,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峻呛,像睡著了一般罗售。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钩述,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天寨躁,我揣著相機與錄音,去河邊找鬼牙勘。 笑死职恳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的方面。 我是一名探鬼主播放钦,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恭金!你這毒婦竟也來了操禀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤横腿,失蹤者是張志新(化名)和其女友劉穎床蜘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔑水,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡邢锯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搀别。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丹擎。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒂培,到底是詐尸還是另有隱情再愈,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布护戳,位于F島的核電站翎冲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏媳荒。R本人自食惡果不足惜抗悍,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钳枕。 院中可真熱鬧缴渊,春花似錦、人聲如沸鱼炒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昔瞧。三九已至指蚁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間自晰,已是汗流浹背欣舵。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缀磕,地道東北人缘圈。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像袜蚕,于是被迫代替她去往敵國和親糟把。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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