
一文帶你了解BAT,TMD都在用的實時計算引擎Flink
截止到11月12日00:00,2020年天貓雙十一全球狂歡節(jié)結(jié)束。整體交易額是4982億元。在整個雙十一中,通過Dashboard實時數(shù)據(jù)綜合股價,可以了解每分鐘的成交額、訂單數(shù)量、爆炸商品、爆炸商品銷售地區(qū)等。這個Dashboard背后的技術(shù)是數(shù)據(jù)實時計算和流程計算。所謂實時計算,可以得到實時想要的數(shù)據(jù)。例如,我想查一下今年雙十一的購買金額。輸入名字和時間后可以馬上統(tǒng)計數(shù)據(jù)。所謂流式計算,就是我每次買都買一個。購買量會自動增加一個,訂單金額會自動增加。實時計算和流式計算都是比較離線計算的改善,離線計算有一定的延遲,將數(shù)據(jù)從記憶中取出進行統(tǒng)計,最后再次出現(xiàn)。我們在雙十一成交額的綜合股價上看到的是實時計算和流式計算的結(jié)合。storm、spark、flink等實現(xiàn)流量計算的技術(shù)有很多。Flank是對流數(shù)據(jù)、批數(shù)據(jù)進行處理的分布式處理引擎,是有界限的數(shù)據(jù)(數(shù)據(jù)量有限制,不變的數(shù)據(jù)集,例如雙十一當日的數(shù)據(jù)量)、無界限的數(shù)據(jù)(例如由淘寶用戶生成的實時的相互數(shù)據(jù),股票市場的實時交易記錄)。Flink的架構(gòu)包括Deploy展開層、Core核心層、API接口層、Lib擴展庫層4個層。展開層主要是Flank的配置模式,支持Local的本地化配置,可以在IDE代碼編輯器中直接執(zhí)行程序。也支持聚類配置。使用Kubbergnetes和Hadoop的Yarn來創(chuàng)建集群時間表。也支持云上的配置。通過彈性主機實現(xiàn)自動擴展容量。核心層主要是分布式流處理引擎,支持分布式stream處理,支持從jobgraph到execution的映射時間表,支持上級API接口的任務(wù)。API層主要是為開發(fā)者提供API的分布式任務(wù),包括數(shù)據(jù)Set API、數(shù)據(jù)Stream API兩個API,數(shù)據(jù)Stream API主要用于處理對流數(shù)據(jù)。這是一個抽象的流數(shù)據(jù)分布公式的數(shù)據(jù)流,開發(fā)者正在方便地處理分布式數(shù)據(jù)流。有限的數(shù)據(jù)抽象分布式的數(shù)據(jù)集處理。在Lib庫層中,主要通過擴展庫方式向開發(fā)者提供場景,例如CEP復(fù)雜事件處理、Table將結(jié)構(gòu)化數(shù)據(jù)抽象到關(guān)系表中,SQL文查詢、FlinkML支持機器學習、Gelly庫支持圖處理。
了解了Flink的基本框架后,F(xiàn)link的基本編程模式怎么樣?在Flank中,主要以三個步驟進行數(shù)據(jù)輸入、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)輸出,開發(fā)者可以通過API接口將數(shù)據(jù)庫數(shù)據(jù)或自己的本地文件數(shù)據(jù)或消息隊列Kafka的數(shù)據(jù)傳遞給Flank,F(xiàn)lank處理引擎可以進行解將數(shù)據(jù)按時間窗口順序排序,或按最受歡迎的順序排序,或按地區(qū)匯總等數(shù)據(jù),最后請通過Sink。在信息隊列或數(shù)據(jù)大盤中輸出數(shù)據(jù)進行展示。
在Flank的處理引擎中,數(shù)據(jù)是這樣流動的。開發(fā)者創(chuàng)建Fink應(yīng)用程序代碼,通過Celient轉(zhuǎn)發(fā)給JobManager。JobManager是Flank的主節(jié)點。在Task Manager上執(zhí)行任務(wù)的安排。同時管理Task Manager節(jié)點的調(diào)度狀況。點。Taskmanager主要接受JobManager的任務(wù)。一個Taskmanager占用了JVM內(nèi)存。TaskManager還包含Tasky Slot的概念。為了管理內(nèi)存分配,一個Slot表示其分配100%的內(nèi)存空間。兩個表示各分配50%的空間。每個Slot占用一個線程,具體執(zhí)行任務(wù)。
在DevOps工程師文化、Kubergnetes容器技術(shù)盛行的互聯(lián)網(wǎng)上,F(xiàn)lank也可以進行同樣的工作。特別是在大工廠,基本上是這樣的架構(gòu)運行原理。開發(fā)者創(chuàng)建Flank任務(wù)代碼,通過Gight的push事件提交代碼,觸發(fā)對應(yīng)的Jenkins集群,在Kubbergnetes上配備JobManager、Tasmanager,JobManager和TaskyManager占據(jù)一個以上POD,實現(xiàn)自動彈性伸縮,開發(fā)者和操作員基于Kubbergnets也可以根據(jù)需要管理Flank系統(tǒng)。
本文介紹了Flink的基本架構(gòu)、編程模型和運行原理。還有很多應(yīng)用場景。我們抽象地從3次元看。1、基于事件驅(qū)動,開發(fā)者收集的事件將不斷地放入消息隊列,F(xiàn)lank將不斷地進行信息隊列數(shù)據(jù)消耗,每消耗一個數(shù)據(jù)就會觸發(fā)一個動作。基于欺詐檢測、異常檢測、規(guī)則警告、業(yè)務(wù)流程監(jiān)視可使用此特性。2、分析場景。開發(fā)者將數(shù)據(jù)實時或周期性地寫入消息隊列,F(xiàn)link不斷地實時計算應(yīng)用源數(shù)據(jù),更新數(shù)據(jù)庫或HFS,最后在大屏幕上創(chuàng)建展示或數(shù)據(jù)報告,并舉例說明例如,雙十一DashBoard;3、將管路ETL即數(shù)據(jù)提取到數(shù)據(jù)庫或文件系統(tǒng)。下圖是Flink在阿里巴巴內(nèi)部的主要應(yīng)用場景。
除了螞蟻以外,在百度、騰訊、美團、滴滴、頭條、京東、拼多等公司,F(xiàn)link的應(yīng)用也非常普及。在網(wǎng)絡(luò)流量王時代,需要基于大數(shù)據(jù)的離線分析、實時分析,數(shù)據(jù)開發(fā)工程師的報酬也非常高,要掌握Flank的基本使用知識,需要一定的技能。如果對大數(shù)據(jù)開發(fā)有興趣的話,就早點學習Flank吧。