文章目錄
- Flink架構體系
- API & Libraries層
- Runtime核心層
- 物理部署層
- Flink運行時組件
- JobManager
- TaskManager
- ResourceManger
- Dispatcher
Flink架構體系
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GP4rEoOL-1612875392113)(/Users/bytedance/Desktop/screenshot-20210202-032808.png)]](https://img.uj5u.com/2021/02/10/223442101154151.png)
在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虛擬機)運行,
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FGaR9sUg-1612875392117)(/Users/bytedance/Desktop/src=http___imgedu.lagou.com_e711c26976c9494d937c6d5c3de1c07e.jpg&refer=http___imgedu.lagou.jpeg)]](https://img.uj5u.com/2021/02/10/223442101154152.jpg)
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,
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vOeX7IeL-1612875392121)(/Users/bytedance/Desktop/screenshot-20210201-145801.png)]](https://img.uj5u.com/2021/02/10/223442101154153.png)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-41mozM5Z-1612875392123)(/Users/bytedance/Desktop/screenshot-20210204-085117.png)]](https://img.uj5u.com/2021/02/10/223442101154154.png)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/258398.html
標籤:其他
上一篇:RabbitMQ 簡介
