##[一致性]KafKa數據存儲與數據一致性保證

KafKa數據存儲與數據一致性保證 - tianjinsong的專欄 - 博客頻道 - CSDN.NET http://blog.csdn.net/bluetjs/article/details/52986652

數據一致性保證
一致性定義:若某條消息對client可見,那么即使Leader掛了,在新Leader上數據依然可以被讀到
HW-HighWaterMark: client可以從Leader讀到的最大msg offset,即對外可見的最大offset, HW=max(replica.offset)
對于Leader新收到的msg,client不能立刻消費,Leader會等待該消息被所有ISR中的replica同步后,更新HW,此時該消息才能被client消費,這樣就保證了如果Leader fail,該消息仍然可以從新選舉的Leader中獲取。
對于來自內部Broker的讀取請求,沒有HW的限制。同時,Follower也會維護一份自己的HW,Folloer.HW = min(Leader.HW, Follower.offset)


數據存儲
Topic
一類消息稱為一個Topic


Topic邏輯結構
Topic可分為多個Parition;
Parition內部保證數據的有序,按照消息寫入順序給每個消息賦予一個遞增的offset;
為保證數據的安全性,每個Partition有多個Replica

多Parition的優點
并發讀寫,加快讀寫速度
多Partition分布式存儲,利于集群數據的均衡
加快數據恢復的速率:當某臺機器掛了,每個Topic僅需恢復一部分的數據,多機器并發

缺點
Partition間Msg無序,若想保證Msg寫入與讀取的序不變,只能申請一個Partition

Partition


Partition存儲結構
每個Partition分為多個Segment
每個Segment包含兩個文件:log文件和index文件,分別命名為start_offset.log和start_offset.index
log文件包含具體的msg數據,每條msg會有一個遞增的offset
Index文件是對log文件的索引:每隔一定大小的塊,索引msg在該segment中的相對offset和在log文件中的位置偏移量


根據offset查找msg的過程
根據msg的offset和log文件名中的start_offset,找到最后一個不大于msgoffset的segment,即為msg所在的segment;
根據對應segment的index文件,進一步查找msg在log文件中的偏移量
從log文件的偏移量開始讀取解析msg,比較msgoffset,找到所要讀取的msg

Partition recovery過程
每個Partition會在磁盤記錄一個RecoveryPoint, 記錄已經flush到磁盤的最大offset。當broker fail 重啟時,會進行loadLogs。首先會讀取該Partition的RecoveryPoint,找到包含RecoveryPoint的segment及以后的segment, 這些segment就是可能沒有完全flush到磁盤segments。然后調用segment的recover,重新讀取各個segment的msg,并重建索引
優點
以segment為單位管理Partition數據,方便數據生命周期的管理,刪除過期數據簡單
在程序崩潰重啟時,加快recovery速度,只需恢復未完全flush到磁盤的segment
通過命名中offset信息和index文件,大大加快msg查找時間,并且通過分多個Segment,每個index文件很小,查找速度更快

數據的同步


數據流
Partition的多個replica中一個為Leader,其余為follower
Producer只與Leader交互,把數據寫入到Leader中
Followers從Leader中拉取數據進行數據同步
Consumer只從Leader拉取數據

ISR:所有不落后的replica集合, 不落后有兩層含義:距離上次FetchRequest的時間不大于某一個值或落后的消息數不大于某一個值,Leader失敗后會從ISR中選取一個Follower做Leader

數據可靠性保證
當Producer向Leader發送數據時,可以通過acks參數設置數據可靠性的級別
0: 不論寫入是否成功,server不需要給Producer發送Response,如果發生異常,server會終止連接,觸發Producer更新meta數據;
1: Leader寫入成功后即發送Response,此種情況如果Leader fail,會丟失數據
-1: 等待所有ISR接收到消息后再給Producer發送Response,這是最強保證

僅設置acks=-1也不能保證數據不丟失,當Isr列表中只有Leader時,同樣有可能造成數據丟失。要保證數據不丟除了設置acks=-1, 還要保證ISR的大小大于等于2,具體參數設置:
request.required.acks:設置為-1 等待所有ISR列表中的Replica接收到消息后采算寫成功;
min.insync.replicas: 設置為大于等于2,保證ISR中至少有兩個Replica

Producer要在吞吐率和數據可靠性之間做一個權衡
數據一致性保證
一致性定義:若某條消息對client可見,那么即使Leader掛了,在新Leader上數據依然可以被讀到
HW-HighWaterMark: client可以從Leader讀到的最大msg offset,即對外可見的最大offset, HW=max(replica.offset)
對于Leader新收到的msg,client不能立刻消費,Leader會等待該消息被所有ISR中的replica同步后,更新HW,此時該消息才能被client消費,這樣就保證了如果Leader fail,該消息仍然可以從新選舉的Leader中獲取。

對于來自內部Broker的讀取請求,沒有HW的限制。同時,Follower也會維護一份自己的HW,Folloer.HW = min(Leader.HW, Follower.offset)
HDFS數據組織

與Kafka有幾點明顯不同:
數據分塊,比如以64M為一個數據塊;
流水線復制:每個數據塊沒有Leader和Follower之分,采用流水線的方式進行數據復制;
就近讀取:為了減少讀取時的網路IO,采用就近讀取,加快讀取速率


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容