一、基本組件棧面試
瞭解Spark的朋友會發現Flink的架構和Spark是很是相似的,在整個軟件架構體系中,一樣遵循着分層的架構設計理念,在下降系統耦合度的同時,也爲上層用戶構建Flink應用提供了豐富且友好的接口。segmentfault
https://mmbiz.qpic.cn/mmbiz_p...網絡
Flink分爲架構分爲三層,由上往下依次是API&Libraries層、Runtime核心層以及物理部署層多線程
API&Libraries層架構
做爲分佈式數據處理框架,Flink同時提供了支撐計算和批計算的接口,同時在此基礎上抽象出不一樣的應用類型的組件庫,如基於流處理的CEP(復瑣事件處理庫)、SQL&Table庫和基於批處理的FlinkML(機器學習庫)等、Gelly(圖處理庫)等。API層包括構建流計算應用的DataStream API和批計算應用的DataSet API,二者都提供給用戶豐富的數據處理高級API,例如Map、FlatMap操做等,同時也提供比較低級的Process Function API,用戶能夠直接操做狀態和時間等底層數據。框架
Runtime核心層機器學習
該層主要負責對上層不一樣接口提供基礎服務,也是Flink分佈式計算框架的核心實現層,支持分佈式Stream做業的執行、JobGraph到ExecutionGraph的映射轉換、任務調度等。將DataSteam和DataSet轉成統一的可執行的Task Operator,達到在流式引擎下同時處理批量計算和流式計算的目的。分佈式
物理部署層學習
該層主要涉及Flink的部署模式,目前Flink支持多種部署模式:本地、集羣(Standalone、YARN)、雲(GCE/EC2)、Kubenetes。Flink可以經過該層可以支持不一樣平臺的部署,用戶能夠根據須要選擇使用對應的部署模式。大數據
二、基本架構圖
https://mmbiz.qpic.cn/mmbiz_j...
Flink基本架構圖
Flink系統主要由兩個組件組成,分別爲JobManager和TaskManager,Flink架構也遵循Master-Slave架構設計原則,JobManager爲Master節點,TaskManager爲Worker(Slave)節點。全部組件之間的通訊都是藉助於Akka Framework,包括任務的狀態以及Checkpoint觸發等信息。
1.Client客戶端
客戶端負責將任務提交到集羣,與JobManager構建Akka鏈接,而後將任務提交到JobManager,經過和JobManager之間進行交互獲取任務執行狀態。客戶端提交任務能夠採用CLI方式或者經過使用Flink WebUI提交,也能夠在應用程序中指定JobManager的RPC網絡端口構建ExecutionEnvironment提交Flink應用。
2.JobManager
JobManager負責整個Flink集羣任務的調度以及資源的管理,從客戶端中獲取提交的應用,而後根據集羣中TaskManager上TaskSlot的使用狀況,爲提交的應用分配相應的TaskSlots資源並命令TaskManager啓動從客戶端中獲取的應用。JobManager至關於整個集羣的Master節點,且整個集羣中有且僅有一個活躍的JobManager,負責整個集羣的任務管理和資源管理。JobManager和TaskManager之間經過Actor System進行通訊,獲取任務執行的狀況並經過Actor System將應用的任務執行狀況發送給客戶端。同時在任務執行過程當中,Flink JobManager會觸發Checkpoints操做,每一個TaskManager節點收到Checkpoint觸發指令後,完成Checkpoint操做,全部的Checkpoint協調過程都是在Flink JobManager中完成。當任務完成後,Flink會將任務執行的信息反饋給客戶端,而且釋放掉TaskManager中的資源以供下一次提交任務使用。
3.TaskManager
TaskManager至關於整個集羣的Slave節點,負責具體的任務執行和對應任務在每一個節點上的資源申請與管理。客戶端經過將編寫好的Flink應用編譯打包,提交到JobManager,而後JobManager會根據已經註冊在JobManager中TaskManager的資源狀況,將任務分配給有資源的TaskManager節點,而後啓動並運行任務。TaskManager從JobManager接收須要部署的任務,而後使用Slot資源啓動Task,創建數據接入的網絡鏈接,接收數據並開始數據處理。同時TaskManager之間的數據交互都是經過數據流的方式進行的。
能夠看出,Flink的任務運行實際上是採用多線程的方式,這和MapReduce多JVM進程的方式有很大的區別Flink可以極大提升CPU使用效率,在多個任務和Task之間經過TaskSlot方式共享系統資源,每一個TaskManager中管理多個TaskSlot資源池進行對資源進行有效管理。
聲明:本號全部文章除特殊註明,都爲原創,公衆號讀者擁有優先閱讀權,未經做者本人容許不得轉載,不然追究侵權責任。
關注個人公衆號,後臺回覆【JAVAPDF】獲取200頁面試題!
5萬人關注的大數據成神之路,不來了解一下嗎?
5萬人關注的大數據成神之路,真的不來了解一下嗎?
5萬人關注的大數據成神之路,肯定真的不來了解一下嗎?