Flink入門(二)——Flink架構介紹

1、基本組件棧

瞭解Spark的朋友會發現Flink的架構和Spark是非常類似的,在整個軟件架構體系中,同樣遵循着分層的架構設計理念,在降低系統耦合度的同時,也爲上層用戶構建Flink應用提供了豐富且友好的接口。

https://mmbiz.qpic.cn/mmbiz_png/mqibsuEhdUyIVKMN1mHneQiantTzuhJYqwSD0k9gn8RCcJZHeD19KxcLj8ydCUr9KuepDWu6fk2J47oKx6dyQlfQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1file

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能夠通過該層能夠支持不同平臺的部署,用戶可以根據需要選擇使用對應的部署模式。

2、基本架構圖

https://mmbiz.qpic.cn/mmbiz_jpg/mqibsuEhdUyIVKMN1mHneQiantTzuhJYqwPHPMVrheYEic9szSsw2eX0hr11Cr8IdlEYWBV55GINbTFS49qpJcJibg/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1file

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萬人關注的大數據成神之路,確定真的不來了解一下嗎?

歡迎您關注《大數據成神之路》

大數據技術與架構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章