從盤古開(kāi)天辟地說(shuō)起為什么 Flink CP 能實(shí)現(xiàn)精確一次?(上)

1.前言

對(duì)于很多做離線或者實(shí)時(shí)數(shù)倉(cāng)的小伙伴來(lái)說(shuō)间唉,我先問(wèn)幾個(gè)問(wèn)題绞灼,看看小伙伴萌能回答上來(lái)嗎?

? 你知道狀態(tài)是什么嗎呈野?在離線數(shù)據(jù)開(kāi)發(fā)的經(jīng)歷中低矮,你碰到過(guò)狀態(tài)的概念嗎?

? 為什么離線數(shù)倉(cāng)不需要狀態(tài)被冒,實(shí)時(shí)數(shù)據(jù)開(kāi)發(fā)中老是提到狀態(tài)的概念军掂?

? Flink 中的狀態(tài)轮蜕、狀態(tài)后端、全局一致性快照(Checkpoint\Savepoint) 的作用都是什么蝗锥,這三個(gè)概念的關(guān)聯(lián)又是什么跃洛?

? Flink 是通過(guò)什么機(jī)制來(lái)做 Checkpoint 的?為什么這套機(jī)制能夠做到精確一次呢终议?

? Flink Checkpoint 是基于 Chandy-Lamport 算法的汇竭,但是 Flink 的實(shí)現(xiàn)相比 Chandy-Lamport 算法之間又有哪些優(yōu)點(diǎn)、缺點(diǎn)穴张?

? Flink Checkpoint 用到了 barrier细燎,為什么用了 barrier 做的快照就能保證全局一致性快照的正確性?barrier 到底起到了什么作用陆馁?

小伙伴們思考一下找颓,都能回答上來(lái)么,如果對(duì)于某些問(wèn)題你還有疑問(wèn)叮贩,樓主會(huì)通過(guò)本篇文章幫你解答這些問(wèn)題击狮,理清這些概念!

由于本文內(nèi)容較多益老,所以博主將本文分為彪蓬,兩集,本別在兩天發(fā)出捺萌。

我們先來(lái)看看博主整理的本文介紹思路以及博主希望大家在看完每一小節(jié)之后能夠?qū)W到的內(nèi)容档冬。

? 什么是狀態(tài)?

希望小伙伴萌能夠發(fā)散思維的去思考狀態(tài)桃纯,狀態(tài)這個(gè)概念不僅僅只限于 Flink 的狀態(tài)酷誓,狀態(tài)是一個(gè)無(wú)處不在的東西

? 什么是全局一致性快照?其和狀態(tài)的管理态坦?

舉一些狀態(tài)盐数、全局一致性快照的一些生活、工作中應(yīng)用的例子伞梯,希望大家大家學(xué)習(xí)到全局一致性快照 = 一個(gè)應(yīng)用某一時(shí)刻(瞬間)所有事物所處狀態(tài)的合集玫氢,兩者是包含關(guān)系

? 為什么需要全局一致性快照?

希望大家學(xué)習(xí)到有了全局一致性快照能幫助我們做故障恢復(fù)谜诫、死鎖檢測(cè)等很多有利的事情漾峡。

? 常見(jiàn)分布式應(yīng)用中的全局一致性快照包含哪些內(nèi)容?

通過(guò)一個(gè)簡(jiǎn)單分布式應(yīng)用介紹一下一個(gè)全局一致性快照包含:分布式應(yīng)用每個(gè)進(jìn)程的狀態(tài) + 正在網(wǎng)絡(luò)傳輸中的消息(這個(gè)消息其實(shí)就是狀態(tài))喻旷。并且全局一致性快照每時(shí)每刻都存在的生逸,時(shí)間軸上的每一個(gè)時(shí)刻都存在一個(gè)全局一致性快照(類似無(wú)時(shí)無(wú)刻的在拍照片,每個(gè)照片都是一個(gè)全局一致性快照)。Flink 做 Checkpoint 其實(shí)就是每隔固定的時(shí)間(小伙伴萌自己在程序代碼中設(shè)定的 Checkpoint 間隔)從時(shí)間軸上的一個(gè)點(diǎn)拿出來(lái)這個(gè)時(shí)間點(diǎn)對(duì)應(yīng)的一個(gè)全局一致性狀態(tài)槽袄。

? 分布式應(yīng)用實(shí)現(xiàn)全局一致性快照的方案伟阔?

2.什么是狀態(tài)?

2.1.首先看看狀態(tài)的定義

當(dāng)前計(jì)算流程需要依賴到之前計(jì)算的結(jié)果掰伸,那么之前計(jì)算的結(jié)果就是狀態(tài)

從上面這個(gè)定義出發(fā)怀估。我們就可以意識(shí)到狮鸭,狀態(tài)并不僅僅是在 Flink 中有這個(gè)概念,其實(shí)這是一個(gè)很廣泛的概念多搀。狀態(tài)是一個(gè)普遍存在的東西歧蕉!

2.2.狀態(tài)的常見(jiàn)案例

??生活中的例子:為什么我知道我的面前放著一臺(tái)電腦?因?yàn)檠劬邮盏酵饨绲膱D案康铭,然后我的大腦接收到這個(gè)眼睛傳輸?shù)膱D案信息后惯退,拿記憶中存儲(chǔ)的圖案進(jìn)行對(duì)比,匹配得到這是電腦从藤,所以我才識(shí)別除了這是一臺(tái)電腦催跪,其中記憶中存儲(chǔ)的圖案就是狀態(tài);比如日久生情夷野,為什么感情會(huì)越來(lái)越深懊蒸,因?yàn)榻裉斓母星?= 今天積累的感情 + 以前積累的感情,以前積累的感情就是狀態(tài)悯搔。其實(shí)可以看到生活中無(wú)處不在都有狀態(tài)骑丸!

??web server 應(yīng)用中的狀態(tài):打開(kāi) github 頁(yè)面,列表展示了我的歸屬倉(cāng)庫(kù)妒貌。其流程就是 web client 發(fā)給 web server 去查詢我的歸屬倉(cāng)庫(kù)通危,web server 接收到請(qǐng)求之后,然后去存儲(chǔ)引擎中進(jìn)行查詢匹配返回灌曙。那么存儲(chǔ)引擎中存儲(chǔ)的內(nèi)容就是狀態(tài)菊碟,如下圖所示:

1

??Flink 應(yīng)用中的狀態(tài):計(jì)算最常見(jiàn)的 DAU 指標(biāo),那么必然需要做 id 去重平匈,涉及到去重時(shí)框沟,就要存儲(chǔ)歷史所有來(lái)過(guò)的的 id,如下圖所示增炭,案例非常之多:

2

3.什么是全局一致性快照忍燥?

??生活中的例子:拍一個(gè)照片,如下圖隙姿,那么照片的內(nèi)容就是當(dāng)時(shí)的一個(gè)全局一致性快照(其中每一個(gè)人都有一個(gè)?狀態(tài)梅垄,這些?狀態(tài)?在同一時(shí)刻的組合就是一個(gè)?全局一致性快照)。所以其實(shí)?全局一致性快照?是由所有?狀態(tài)?的一個(gè)時(shí)刻的快照組成。

3

??分布式應(yīng)用的例子:我們有一個(gè)分布式應(yīng)用队丝,其有多個(gè)進(jìn)程分布在多個(gè)物理機(jī)上靡馁,在每個(gè)進(jìn)程內(nèi)部都有自己的處理邏輯和狀態(tài),并且每個(gè)進(jìn)程之間可以互相通信机久。那么這個(gè)分布式應(yīng)用某一時(shí)刻的全局狀態(tài)臭墨,也叫做?全局一致性快照

在了解了狀態(tài)以及全局一致性快照之后膘盖,我們來(lái)看看我們?yōu)槭裁葱枰忠恢滦钥煺眨?/p>

4.為什么需要全局一致性快照胧弛?

??可以用來(lái)故障恢復(fù):我們以 Flink 計(jì)算 DAU 為例,如果沒(méi)有全局一致性快照(即沒(méi)有狀態(tài))侠畔,也就是我們沒(méi)有使用到 MapState 去重结缚,而只用一個(gè)存在內(nèi)存中的 HashMap 做去重的話,當(dāng) Flink 任務(wù)發(fā)生故障時(shí)软棺,重新拉起之后红竭,HashMap 的數(shù)據(jù)就清空了,那么我們就需要從歷史最開(kāi)始的起點(diǎn)開(kāi)始重跑所有的數(shù)據(jù)喘落,才能得到正確的數(shù)據(jù)茵宪。但是:

? 流式應(yīng)用的上游存儲(chǔ)介質(zhì)一般都不支持存儲(chǔ)歷史所有數(shù)據(jù)(比如上游為 kafka,kafka 不可能存儲(chǔ)歷史所有數(shù)據(jù))

? 重跑時(shí)效性不能滿足時(shí)效性要求(回溯歷史數(shù)據(jù)的情況下瘦棋,一定會(huì)產(chǎn)生延遲眉厨,時(shí)效性是達(dá)不到要求的)

??而當(dāng)有了全局一致性快照之后,我們就不必要從【歷史最開(kāi)始的起點(diǎn)】開(kāi)始重跑所有的數(shù)據(jù)(其實(shí)這就是我們需要全局一致性快照的目的J尴痢:豆伞!)箕慧,數(shù)據(jù)可以從近處回溯服球,并且由于回溯數(shù)據(jù)范圍小,時(shí)效性也可以被滿足

??可以做任務(wù)的死鎖檢測(cè):快照其實(shí)就相當(dāng)于某一個(gè)時(shí)刻的抓拍颠焦,當(dāng)我們抓拍到了一個(gè)任務(wù)某一時(shí)刻的運(yùn)行情況時(shí)斩熊,我們就可以分析在任務(wù)是不是有死鎖。

回到 Flink 來(lái)說(shuō)伐庭,F(xiàn)link 的?Checkpoint?和?Savepoint?實(shí)際上就是全局一致性快照這個(gè)概念在工業(yè)應(yīng)用上的一個(gè)具體實(shí)現(xiàn)粉渠。

5.常見(jiàn)分布式應(yīng)用中的全局一致性快照包含哪些內(nèi)容?

如下面第一張圖所示圾另,就是一個(gè)分布式應(yīng)用霸株,我們可以看到,分布式應(yīng)用的一個(gè)全局一致性快照包含:分布式應(yīng)用每個(gè)進(jìn)程的狀態(tài) + 正在網(wǎng)絡(luò)傳輸中的消息(這個(gè)消息其實(shí)就是狀態(tài))集乔,也就是以上帝視角去抓拍這個(gè)分布式應(yīng)用時(shí)去件,這個(gè)分布式應(yīng)用的全局快照會(huì)包含 Process 的狀態(tài) + 網(wǎng)絡(luò) Channel 中的狀態(tài)。

以這個(gè)前提出發(fā),我們連看下面四張圖:

上面四張圖對(duì)應(yīng)到這個(gè)分布式應(yīng)用四個(gè)時(shí)刻的四個(gè)快照尤溜,其實(shí)應(yīng)用的每一個(gè)時(shí)刻都存在一個(gè)全局一致性快照倔叼,遠(yuǎn)遠(yuǎn)不止四個(gè)。

11

6.分布式應(yīng)用實(shí)現(xiàn)全局一致性快照的方案宫莱?

實(shí)現(xiàn)方式主要分為同步實(shí)現(xiàn)方式和異步實(shí)現(xiàn)方式兩類丈攒。

6.1.同步實(shí)現(xiàn)方式

14

??NTP[1]: NTP服務(wù)器[Network Time Protocol(NTP)]是用來(lái)使計(jì)算機(jī)時(shí)間同步化的一種協(xié)議,它可以使計(jì)算機(jī)對(duì)其服務(wù)器或時(shí)鐘源(如石英鐘授霸,GPS等等)做同步化肥印,它可以提供高精準(zhǔn)度的時(shí)間校正(LAN上與標(biāo)準(zhǔn)間差小于1毫秒,WAN上幾十毫秒)結(jié)論:在分布式應(yīng)用中绝葡,不同機(jī)器上面的進(jìn)行無(wú)法實(shí)現(xiàn)時(shí)鐘的完全對(duì)齊,所以分布式應(yīng)用也就沒(méi)法用時(shí)鐘同步的方式做出全局一致性快照腹鹉。

??Stop-The-World[2]結(jié)論:使用此種方式做快照藏畅,分布式應(yīng)用所有進(jìn)程會(huì)停下來(lái)做快照,不滿足時(shí)效等需求功咒,在實(shí)時(shí)分布式應(yīng)用中無(wú)法采用愉阎。

上述兩種同步方式都不行,那如果同步實(shí)現(xiàn)方式不滿足需求力奋,能使用異步方式做到同步相同的快照也是可以滿足需求的榜旦。

6.2.異步實(shí)現(xiàn)方式

??Chandy-Lamport[3]

本文下集詳細(xì)接著介紹。敬請(qǐng)期待景殷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溅呢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猿挚,更是在濱河造成了極大的恐慌咐旧,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绩蜻,死亡現(xiàn)場(chǎng)離奇詭異铣墨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)办绝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門伊约,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人孕蝉,你說(shuō)我怎么就攤上這事屡律。” “怎么了降淮?”我有些...
    開(kāi)封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵疹尾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)纳本,這世上最難降的妖魔是什么窍蓝? 我笑而不...
    開(kāi)封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮繁成,結(jié)果婚禮上吓笙,老公的妹妹穿的比我還像新娘。我一直安慰自己巾腕,他們只是感情好面睛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著尊搬,像睡著了一般叁鉴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佛寿,一...
    開(kāi)封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天幌墓,我揣著相機(jī)與錄音,去河邊找鬼冀泻。 笑死常侣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弹渔。 我是一名探鬼主播胳施,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肢专!你這毒婦竟也來(lái)了舞肆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤博杖,失蹤者是張志新(化名)和其女友劉穎胆绊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欧募,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡压状,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跟继。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片种冬。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舔糖,靈堂內(nèi)的尸體忽然破棺而出娱两,到底是詐尸還是另有隱情,我是刑警寧澤金吗,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布十兢,位于F島的核電站趣竣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旱物。R本人自食惡果不足惜遥缕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宵呛。 院中可真熱鬧单匣,春花似錦、人聲如沸宝穗。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逮矛。三九已至鸡号,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間须鼎,已是汗流浹背鲸伴。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莉兰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓礁竞,卻偏偏與公主長(zhǎng)得像糖荒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子模捂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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