您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Flink架構是怎么樣的,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
了解Spark的朋友會發現Flink的架構和Spark是非常類似的,在整個軟件架構體系中,同樣遵循著分層的架構設計理念,在降低系統耦合度的同時,也為上層用戶構建Flink應用提供了豐富且友好的接口。
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能夠通過該層能夠支持不同平臺的部署,用戶可以根據需要選擇使用對應的部署模式。
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資源池進行對資源進行有效管理。
關于“Flink架構是怎么樣的”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。