Stateful Streaming Processing

1. 什么是State

有時候除了一次處理一個event, 我們也想記錄處理多個event的信息,這個時候的操作就是stateful有狀態(tài)的。

2. 按key分組的state

按key分組的state就是一個key-value store, state的分區(qū)和分發(fā)都是嚴格和stream在一起的噩斟,對keyed state的訪問只能在對應的keyed stream上,這保證了keyed state的更新都是在本地發(fā)生的, 既保證了一致性又不需要有事務開銷。keyed state又進一步被組織成Key Groups. Key Groups是Flink能分發(fā)keyed state的最小單元,key groups的數量與最大并行度一致并级。

3.State Persistence

Flink通過 stream replay 和 checkpointting 實現容錯。一個checkpoint記錄了在某一點所有的input streams在所有operators的執(zhí)行狀態(tài)侮腹,通過恢復checkpoint嘲碧,并將stream重置到與checkpoint對應的event,可恢復flink應用的運行父阻。checkpoint是默認關閉的愈涩。為了配合checkpoint實現容錯,stream data source需要是能replay的加矛,比如kafka.

3.1 Checkpoingtting

checkpointting 是異步的履婉,checkpoint barriers可以不一致,每個operation可以異步地拍下各自狀態(tài)的快照斟览。

3.1.1 Barriers

stream barrier 是插入到data stream中的一條記錄谐鼎,用來區(qū)分哪些記錄應該在當前snapshot中,哪些應該到下一個snapshot中趣惠。barrier會攜帶當前snapshot的ID,是非常輕量的不會影響stream的處理身害。一個stream里可以同時存在多個barrier, 即多個snapshot可能在同時發(fā)生味悄。



stream barrier從data source開始插入到data stream, 一個中間operator從它所有的input streams都接收到snapshot n的barrier后,向它的所有output stream發(fā)出一個barrier. 當data sink 從它的所有input stream都接收到barrier后塌鸯,向jobmanager報告snapshot n已完成侍瑟,所有的data sink都完成以后,snapshot n結束。一個snapshot n結束之后涨颜,job不會再處理Sn之前的記錄费韭。

如果一個operator有多個input stream, 它要基于barrier對齊它們:

  1. operator收到某一個input stream的barrier以后,就不能再處理這個stream之后的event, 而應該把他們放到緩存里
  2. operator收到最后一個input stream的barrier后庭瑰,先發(fā)出所有要發(fā)出的屬于當前snapshot的記錄星持,再發(fā)出一個barrier給所有output stream
  3. operator把當前state記錄到snapshot, 恢復處理緩存中的記錄, 再處理新到的記錄
  4. operator將state異步寫回到state backend

3.1.2 Snapshotting Operator State

operator的state也要包含再snapshot中。
operator接收到它的所有input steam的barrier后弹灭,開始記錄自己的snapshot, 將snapshot存儲到state backend后督暂,向output stream發(fā)出barrier。
snapshot包含:

  1. 對每一個stream, snapshot開始時處理的數據位置offset/position
  2. 對每一個operator, 一個指向snapshot中state的指針

3.1.3 Recovery

一旦程序失敗了穷吮,Flink選擇一個最近的完整的checkpoint恢復operator的狀態(tài)和input stream的位置逻翁。如果state是增量創(chuàng)建的,則選擇一個最近的完整的捡鱼,然后依次將增量修改更新到state上八回。

3.2 Unaligned Checkpointting

不對齊的checkpointting過程如下:

  1. operator對接收到的barrier做出響應
  2. operator立即向output stream發(fā)出barrier
  3. operator將提前到達的記錄(在最后一個stream的barrier到達之前處理的其他stream中不屬于本snapshot的記錄)做上標記并創(chuàng)建一個快照
    不對齊的checkpointting能保證盡快處理掉所有記錄,降低延遲驾诈,對于多個input stream速度不一致的情況很有效缠诅。
    不對齊的checkpointting的做異常恢復時要先處理那些提前到達的記錄翘鸭,再處理新到達的記錄滴铅,其他過程與對齊的checkpointting一樣。

3.3 State Backends

State可以存儲在內存中就乓,也可以存儲在RocksDB中汉匙,選用的數據結果取決于選用的backend.

3.4 Savepoints

所有支持checkpoint的程序都支持savepoint. savepoint由用戶手動觸發(fā),且不會自動過期生蚁,其他與checkpoints一樣噩翠。

3.5 Exactly Once & At Least Once

對齊的checkpoint能夠保證exactly once, 而不對齊的checkpoints只能保證al least once. 因為不對齊的checkpoints中已經包含了應該在之后的snapshot中的數據,而恢復以后又會再處理一次邦投。

4. 批處理程序中的狀態(tài)和容錯

Flink以流處理的方式對待批處理伤锚,即一個DataSet被當作一個有界流處理,所以批處理中的狀態(tài)和容錯與流處理大體一致志衣,僅有以下幾個差一點:

  1. 批處理的容錯不使用checkpoints屯援,而只是把所有的數據重新處理一遍
  2. DataSet API中的狀態(tài)處理使用內存數據結構,而不是用key-value索引
  3. DataSet API引入了只能在有界流上使用的特殊的同步迭代方法
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末念脯,一起剝皮案震驚了整個濱河市狞洋,隨后出現的幾起案子,更是在濱河造成了極大的恐慌绿店,老刑警劉巖吉懊,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庐橙,死亡現場離奇詭異,居然都是意外死亡借嗽,警方通過查閱死者的電腦和手機态鳖,發(fā)現死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恶导,“玉大人浆竭,你說我怎么就攤上這事〖孜” “怎么了兆蕉?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缤沦。 經常有香客問我虎韵,道長,這世上最難降的妖魔是什么缸废? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任包蓝,我火速辦了婚禮,結果婚禮上企量,老公的妹妹穿的比我還像新娘测萎。我一直安慰自己,他們只是感情好届巩,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布硅瞧。 她就那樣靜靜地躺著,像睡著了一般恕汇。 火紅的嫁衣襯著肌膚如雪腕唧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天瘾英,我揣著相機與錄音枣接,去河邊找鬼。 笑死缺谴,一個胖子當著我的面吹牛但惶,可吹牛的內容都是我干的。 我是一名探鬼主播湿蛔,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼膀曾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阳啥?” 一聲冷哼從身側響起添谊,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苫纤,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡卷拘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年喊废,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栗弟。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡污筷,死狀恐怖,靈堂內的尸體忽然破棺而出乍赫,到底是詐尸還是另有隱情瓣蛀,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布雷厂,位于F島的核電站惋增,受9級特大地震影響,放射性物質發(fā)生泄漏改鲫。R本人自食惡果不足惜诈皿,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望像棘。 院中可真熱鬧稽亏,春花似錦、人聲如沸截歉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘪松。三九已至,卻和暖如春凉逛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工缺脉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栗柒。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓僚焦,卻偏偏與公主長得像屡江,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子桩蓉,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容