Flink 架构:三层架构体系、运行时组件
文章目錄
- Flink架構體系
- API & Libraries層
- Runtime核心層
- 物理部署層
- Flink運行時組件
- JobManager
- TaskManager
- ResourceManger
- Dispatcher
Flink架構體系
Flink三層體系架構在Flink整個軟件架構體系中,遵循了分層的架構設計理念,在降低系統耦合度的同時也為上層用戶構建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的映射轉換、任務調度等。
物理部署層
該層主要涉及Flink的部署模式,目前Flink支持多種部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)、Kubenetes。Flink能夠通過該層能夠支持不同的部署,用戶可以根據需要選擇使用對應的部署模式
Flink運行時組件
Flink系統主要由以下四個組件組成
- JobManager(任務管理器)
- TaskManager(作業管理器)
- ResourceManger(資源管理器)
- Dispatcher(分發器)
Flink本身是用Java和Scala實現的,因此所有組件都基于JVM(Java虛擬機)運行。
JobManager
Flink遵循Master-Slave(主從)架構設計原則,JobManager為Master節點,TaskManager為Slave節點,并且所有組件之間的通信都借助Akka,包括任務的狀態以及CheckPoint(檢查點)觸發等信息。
- 作為主進程(Master Process),JobManager控制著單個應用程序的執行,也就是每個應用都由一個不同的JobManager管理。
- JobManager可以接受需要執行的應用,該應用會包含一個所謂的Job Graph(任務圖),即邏輯Dataflow Graph(數據流圖),以及一個打包了全部所需類、庫以及其他資源的JAR文件。
- JobManager將JobGraph轉化為名為Execution Graph(執行圖)的物理Dataflow Graph,其中包含了所有可以并發實行的任務。
- JobManager會從ResourceManager申請執行任務的必要資源——TaskManager slot,一旦它收到了足夠數量的TaskManager slot,它就會將Execution Graph中的任務分發給TaskManager來執行。在執行過程中,JobManager還要負責所有需要集中協調的操作,如創建CheakPoint等。
TaskManager
- TaskManager是Flink的工作進程(Worker Process),在Flink的搭建過程中要啟動多個TaskManager。每個TaskManager提供一定數量的slot(處理槽),slot的數量限制了TaskManager可執行的任務數。
- TaskManager在啟動之后會向ResourceManager注冊它的slot,當接收到ResourceManager的指示時,TaskManager會向JobManager提供一個或者多個slot。之后JobManager就可以向slot中分配任務來執行。
- 在執行過程中,運行同一應用的不同任務的TaskManager之間會產生數據交換。
ResourceManger
- Flink為不同的環境和資源提供者(如YARN、Kubernetes、Stand-alone)提供了不同的ResourceManger。
- ResourceManger負責管理Flink的處理資源單元——TaskManager Slot。
- 當JobManager申請TaskManager slot時,ResourceManger會指示一個擁有空閑slot的TaskManager將其slot提供給JobManager。如果ResourceManger的slot數無法滿足JobManager的請求,則ResourceManger可以與資源提供者通信,讓他們提供額外的容器來啟動更多的TaskManager進程。同時,ResourceManger還負責終止空閑進程的TaskManager以釋放計算資源。
Dispatcher
-
Dispatcher在會跨多個作業運行,它提供了一個REST接口來讓我們提交需要執行的應用,一旦某個應用提交執行,則Dispatcher會啟動一個JobManager并將應用轉交給它。
-
REST接口意味著Dispatcher這一集群的HTTP入口可以受到防火墻的保護。
-
Dispatcher同時還會啟動一個Web UI,用來展示和監控有關作業執行的信息。
-
Dispatcher并不是必需的組件,某些應用提交執行的方式可能用不到Dispatcher。
任務提交流程(YARN模式)
總結
以上是生活随笔為你收集整理的Flink 架构:三层架构体系、运行时组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是Flink?Flink能用来做什么
- 下一篇: Flink 时间语义与水位线(Water