Flink 架构:三层架构体系、运行时组件
文章目錄
- Flink架構(gòu)體系
- API & Libraries層
- Runtime核心層
- 物理部署層
- Flink運行時組件
- JobManager
- TaskManager
- ResourceManger
- Dispatcher
Flink架構(gòu)體系
Flink三層體系架構(gòu)在Flink整個軟件架構(gòu)體系中,遵循了分層的架構(gòu)設(shè)計理念,在降低系統(tǒng)耦合度的同時也為上層用戶構(gòu)建Flink應(yīng)用提供了豐富且友好的接口。從上圖可以看出Flink的架構(gòu)體系基本上可以分為以下三層
- API & Libraries層
- Runtime核心層
- 物理部署層
API & Libraries層
作為分布式數(shù)據(jù)處理框架,Flink同時提供了支持流計算和批計算的接口,同時在此基礎(chǔ)之上抽象出不同的應(yīng)用類型的組件庫,如基于流處理的CEP(復(fù)雜事件處理庫)、SQL&Table庫和基于批處理的FlinkML(機器學(xué)習(xí)庫)、Gelly(圖處理庫)等。
API層包括構(gòu)建流計算應(yīng)用的DataStream API和批計算應(yīng)用的DataSet API,兩者都提供給用戶豐富的數(shù)據(jù)處理高級API,例如Map、FlatMap操作等,同時也提供比較低級的Process Function API,用戶可以直接操作狀態(tài)和時間等底層數(shù)據(jù)。
Runtime核心層
該層主要負(fù)責(zé)對上層不同接口提供基礎(chǔ)服務(wù),也是Flink分布式計算框架的核心實現(xiàn)層,支持分布式Stream作業(yè)的執(zhí)行、JobGraph到ExecutionGraph的映射轉(zhuǎn)換、任務(wù)調(diào)度等。
物理部署層
該層主要涉及Flink的部署模式,目前Flink支持多種部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)、Kubenetes。Flink能夠通過該層能夠支持不同的部署,用戶可以根據(jù)需要選擇使用對應(yīng)的部署模式
Flink運行時組件
Flink系統(tǒng)主要由以下四個組件組成
- JobManager(任務(wù)管理器)
- TaskManager(作業(yè)管理器)
- ResourceManger(資源管理器)
- Dispatcher(分發(fā)器)
Flink本身是用Java和Scala實現(xiàn)的,因此所有組件都基于JVM(Java虛擬機)運行。
JobManager
Flink遵循Master-Slave(主從)架構(gòu)設(shè)計原則,JobManager為Master節(jié)點,TaskManager為Slave節(jié)點,并且所有組件之間的通信都借助Akka,包括任務(wù)的狀態(tài)以及CheckPoint(檢查點)觸發(fā)等信息。
- 作為主進(jìn)程(Master Process),JobManager控制著單個應(yīng)用程序的執(zhí)行,也就是每個應(yīng)用都由一個不同的JobManager管理。
- JobManager可以接受需要執(zhí)行的應(yīng)用,該應(yīng)用會包含一個所謂的Job Graph(任務(wù)圖),即邏輯Dataflow Graph(數(shù)據(jù)流圖),以及一個打包了全部所需類、庫以及其他資源的JAR文件。
- JobManager將JobGraph轉(zhuǎn)化為名為Execution Graph(執(zhí)行圖)的物理Dataflow Graph,其中包含了所有可以并發(fā)實行的任務(wù)。
- JobManager會從ResourceManager申請執(zhí)行任務(wù)的必要資源——TaskManager slot,一旦它收到了足夠數(shù)量的TaskManager slot,它就會將Execution Graph中的任務(wù)分發(fā)給TaskManager來執(zhí)行。在執(zhí)行過程中,JobManager還要負(fù)責(zé)所有需要集中協(xié)調(diào)的操作,如創(chuàng)建CheakPoint等。
TaskManager
- TaskManager是Flink的工作進(jìn)程(Worker Process),在Flink的搭建過程中要啟動多個TaskManager。每個TaskManager提供一定數(shù)量的slot(處理槽),slot的數(shù)量限制了TaskManager可執(zhí)行的任務(wù)數(shù)。
- TaskManager在啟動之后會向ResourceManager注冊它的slot,當(dāng)接收到ResourceManager的指示時,TaskManager會向JobManager提供一個或者多個slot。之后JobManager就可以向slot中分配任務(wù)來執(zhí)行。
- 在執(zhí)行過程中,運行同一應(yīng)用的不同任務(wù)的TaskManager之間會產(chǎn)生數(shù)據(jù)交換。
ResourceManger
- Flink為不同的環(huán)境和資源提供者(如YARN、Kubernetes、Stand-alone)提供了不同的ResourceManger。
- ResourceManger負(fù)責(zé)管理Flink的處理資源單元——TaskManager Slot。
- 當(dāng)JobManager申請TaskManager slot時,ResourceManger會指示一個擁有空閑slot的TaskManager將其slot提供給JobManager。如果ResourceManger的slot數(shù)無法滿足JobManager的請求,則ResourceManger可以與資源提供者通信,讓他們提供額外的容器來啟動更多的TaskManager進(jìn)程。同時,ResourceManger還負(fù)責(zé)終止空閑進(jìn)程的TaskManager以釋放計算資源。
Dispatcher
-
Dispatcher在會跨多個作業(yè)運行,它提供了一個REST接口來讓我們提交需要執(zhí)行的應(yīng)用,一旦某個應(yīng)用提交執(zhí)行,則Dispatcher會啟動一個JobManager并將應(yīng)用轉(zhuǎn)交給它。
-
REST接口意味著Dispatcher這一集群的HTTP入口可以受到防火墻的保護(hù)。
-
Dispatcher同時還會啟動一個Web UI,用來展示和監(jiān)控有關(guān)作業(yè)執(zhí)行的信息。
-
Dispatcher并不是必需的組件,某些應(yīng)用提交執(zhí)行的方式可能用不到Dispatcher。
任務(wù)提交流程(YARN模式)
總結(jié)
以上是生活随笔為你收集整理的Flink 架构:三层架构体系、运行时组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是Flink?Flink能用来做什么
- 下一篇: Flink 时间语义与水位线(Water