容錯(cuò)機(jī)制
? 分布式環(huán)境下的流式處理平臺相對于批處理平臺而言,一個(gè)非常重要的問題是如何保證分布式計(jì)算節(jié)點(diǎn)在發(fā)生故障并恢復(fù)后最終的計(jì)算結(jié)果是正確的。在批處理的模式下,數(shù)據(jù)有界,在任務(wù)開始前我們就可以得到需要計(jì)算的所有數(shù)據(jù),如果節(jié)點(diǎn)出錯(cuò),最壞的情況下只需要對數(shù)據(jù)集進(jìn)行重新計(jì)算,但在流式處理模式下,數(shù)據(jù)是源源不斷產(chǎn)生并且無界的,節(jié)點(diǎn)故障恢復(fù)后無法從頭開始重新計(jì)算。
分布式快照
? 在網(wǎng)絡(luò)服務(wù)中,快照是比較常用的一個(gè)容錯(cuò)機(jī)制,比如Redis中就有基于RDB進(jìn)行數(shù)據(jù)恢復(fù)的策略,flink的快速容錯(cuò)機(jī)制也是基于快照的方式實(shí)現(xiàn)的。在單機(jī)環(huán)境下,保存快照比較簡單,只需要在某個(gè)時(shí)間點(diǎn)暫停任務(wù)處理并將當(dāng)前狀態(tài)持久化即可,但在分布式系統(tǒng)中,由于沒有一個(gè)全局時(shí)鐘,想要同時(shí)對所有計(jì)算節(jié)點(diǎn)的狀態(tài)進(jìn)行保存是很難做到的(要詳細(xì)了解可以參考附錄:分布式系統(tǒng)中的時(shí)鐘)。最簡單的實(shí)現(xiàn)方式是通過類似2PC的方式將所有節(jié)點(diǎn)任務(wù)都停止并進(jìn)行狀態(tài)保存,最后統(tǒng)一上報(bào),但這這種stop the world的方式會(huì)極大的增加計(jì)算延時(shí)和降低吞吐量。flink最終的解決方案是基于Chandy-Lamport算法改進(jìn)而來的Asynchronous Barrier Snapshotting(異步屏障快照)算法
Chandy-Lamport
? chandy-lamport算法的核心思想是將分布式系統(tǒng)抽象為一個(gè)有向圖,每個(gè)分布式節(jié)點(diǎn)作為頂點(diǎn),節(jié)點(diǎn)與節(jié)點(diǎn)之間的通信信道被抽象為圖的有向邊(input channel,output channel),在發(fā)起快照時(shí),每個(gè)節(jié)點(diǎn)會(huì)記錄自身狀態(tài)和input channel的狀態(tài),最終可以得到一個(gè)全局一致的快照,下面用一個(gè)例子詳細(xì)解釋。
? 如下圖所示,一個(gè)分布式系統(tǒng)中有兩個(gè)節(jié)點(diǎn)P1和P2,兩個(gè)節(jié)點(diǎn)分別有X,Y,Z三個(gè)狀態(tài),通過C12和C21兩個(gè)信道可以互相發(fā)送消息
? 首先P1發(fā)起了一個(gè)快照操作(同時(shí)可以上報(bào)到一個(gè)全局的快照協(xié)調(diào)系統(tǒng)),他會(huì)先保存自身狀態(tài)[X1:0,Y1:0,Z1:0],并向下游發(fā)送一個(gè)特殊消息marker,用于通知下游節(jié)點(diǎn)也進(jìn)行快照操作,與此同時(shí),P2通過C21向P1發(fā)送了一條業(yè)務(wù)消息
? 此時(shí)由于P1已經(jīng)完成了快照,在P2節(jié)點(diǎn)未完成快照之前不可以進(jìn)行消息處理,否則最后生成的全局快照會(huì)不一致,此時(shí)需要將它的輸入信道C21中的所有消息(目前只有M1)也追加到快照中,與此同時(shí)P2接收到了P1過來的marker信息,同樣進(jìn)行了快照操作
? 最后P1接收到來自P2的marker信息,此時(shí)兩個(gè)節(jié)點(diǎn)快照都保存完畢(同樣可以上報(bào)到一個(gè)全局的快照協(xié)調(diào)系統(tǒng),告知快照操作結(jié)束),可以認(rèn)為全局快照生成成功
? 可以看到整體的算法還是比較簡單易懂的,但要注意的是,此算法要求網(wǎng)絡(luò)的傳輸是有序的,可靠的(很容易就會(huì)想到TCP協(xié)議),需要嚴(yán)格保證消息和marker是按發(fā)送順序到達(dá)其他節(jié)點(diǎn)。
Asynchronous Barrier Snapshotting
? Chandy-Lamport雖然理解起來不復(fù)雜,但存在兩個(gè)比較大的問題。1是在進(jìn)行快照時(shí)節(jié)點(diǎn)不僅需要保存自身狀態(tài),還要保存所有input channer中的消息,這會(huì)導(dǎo)致快照體積比較大,并且基于快照進(jìn)行恢復(fù)時(shí)效率低,2是整個(gè)系統(tǒng)的運(yùn)行效率取決于最慢的計(jì)算節(jié)點(diǎn)。flink基于Chandy-Lamport算法進(jìn)行了改進(jìn),它的核心思想如下
? 每當(dāng)需要生成全局快照時(shí),流的source在產(chǎn)生的消息是插入一個(gè)帶ID的特殊信息,稱之為barrier(屏障),同時(shí)source會(huì)向快照協(xié)調(diào)者上報(bào)快照生成操作已啟動(dòng),并記錄自身offset(用于故障回復(fù)之后流的重放),這些屏障會(huì)將整個(gè)數(shù)據(jù)流切分為不同的數(shù)據(jù)集,當(dāng)下游的處理節(jié)點(diǎn)處理到屏障時(shí)會(huì)在本地保存一份快照,并向更下游廣播帶有相同ID的屏障,最終當(dāng)sink(流的輸出端)也處理到屏障時(shí),向協(xié)調(diào)者上報(bào)快照生成成功,還是以一個(gè)例子進(jìn)行說明
如圖所示,上游節(jié)點(diǎn)的快照已保存成功并且向圖中的task節(jié)點(diǎn)輸出了兩個(gè)數(shù)據(jù)流,由于數(shù)據(jù)流1的處理速度較快,它的屏障N先到達(dá)了圖中的task處,此時(shí)節(jié)點(diǎn)需要暫時(shí)停止處理數(shù)據(jù)流1的消息并將消息保存在本地緩沖中,等到數(shù)據(jù)流2的屏障N也到達(dá)task時(shí),task會(huì)先保存本地狀態(tài)(快照)同時(shí)向下游廣播屏障N,這個(gè)操作被稱之為屏障的對齊,最終sink(輸出)也進(jìn)行屏障對齊之后,會(huì)向快照協(xié)調(diào)者上報(bào)全局快照生成成功,此時(shí)整個(gè)分布式系統(tǒng),包括圖中的task節(jié)點(diǎn)和上游的節(jié)點(diǎn)保存的快照是一致的,即只包含對于屏障N之前的消息的處理狀態(tài),如果發(fā)生故障,各節(jié)點(diǎn)快照中讀取狀態(tài),同時(shí)source屏障N的Offset處進(jìn)行消息回放即可
Asynchronous Barrier Snapshotting算法解決了需要保存額外消息的問題,但和Chandy-Lamport算法一樣,會(huì)導(dǎo)致整個(gè)分布式系統(tǒng)的計(jì)算效率受限于整個(gè)系統(tǒng)中最慢的節(jié)點(diǎn)(需要進(jìn)行屏障對齊),所以Blink/Flink支持關(guān)閉屏障對齊,在這種模式下,如果數(shù)據(jù)流1的屏障先到達(dá),task還是會(huì)繼續(xù)處理數(shù)據(jù)流1的后續(xù)數(shù)據(jù),只是在數(shù)據(jù)流2的屏障到達(dá)時(shí),會(huì)將兩個(gè)時(shí)間段內(nèi)處理的消息一起保存在快照中。在Blink中,快照被稱為Check Point
批處理和支持亂序
Flink中的時(shí)間和窗口
一、Python所有方向的學(xué)習(xí)路線
Python所有方向路線就是把Python常用的技術(shù)點(diǎn)做整理,形成各個(gè)領(lǐng)域的知識點(diǎn)匯總,它的用處就在于,你可以按照上面的知識點(diǎn)去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
二、學(xué)習(xí)軟件
工欲善其事必先利其器。學(xué)習(xí)Python常用的開發(fā)軟件都在這里了,給大家節(jié)省了很多時(shí)間。
三、入門學(xué)習(xí)視頻
我們在看視頻學(xué)習(xí)的時(shí)候,不能光動(dòng)眼動(dòng)腦不動(dòng)手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運(yùn)用它們,這時(shí)候練手項(xiàng)目就很適合了。
小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)初中級Python工程師,想要提升技能,往往是自己摸索成長或者是報(bào)班學(xué)習(xí),但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年P(guān)ython爬蟲全套學(xué)習(xí)資料》送給大家,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻
如果你覺得這些內(nèi)容對你有幫助,可以添加下面V無償領(lǐng)?。。▊渥ⅲ簆ython)
這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻**文章來源:http://www.zghlxwxcb.cn/news/detail-845486.html
如果你覺得這些內(nèi)容對你有幫助,可以添加下面V無償領(lǐng)?。。▊渥ⅲ簆ython)
[外鏈圖片轉(zhuǎn)存中…(img-oe40zdzx-1710966625231)]文章來源地址http://www.zghlxwxcb.cn/news/detail-845486.html
到了這里,關(guān)于Flink原理解析,Python程序員必看的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!