- Flink原理深入與編程實戰:Scala+Java(微課視頻版)
- 辛立偉編著
- 1097字
- 2023-07-17 18:54:28
1.3.2 Flink運行時架構
Flink運行時是Flink的核心計算結構,這是一個分布式系統,它接受流數據處理程序,并在一臺或多臺機器上以容錯的方式執行這些數據流程序。這個運行時可以作為YARN的應用程序在集群中運行,也可以在Mesos集群中運行,或者在一臺機器中運行(通常用于調試Flink應用程序)。
Flink運行時層的整個架構采用了標準Master-Slave的結構,即總是由一個Flink Master(JobManager)和一個或多個Flink Slave(TaskManager)組成。Flink運行時層的主要架構如圖1-8所示。

圖1-8 Apache Flink運行時層的主要架構
圖1-8展示了一個Flink集群的基本結構。在部署Flink時,每個組件通常有多個可用選項,見表1-2。
表1-2 Flink程序部署選項

Flink運行時由兩種類型的進程組成:一個JobManager和一個或多個TaskManager。客戶端不是運行時和程序執行的一部分,而是用于準備數據流并將數據流發送到JobManager。在此之后,客戶端可以斷開連接(分離模式),或者保持連接以接收進度報告(附加模式)。客戶端可以作為觸發執行的Java/Scala程序的一部分運行,也可以在命令行進程(./bin/flink run)中運行。
對Flink運行時架構更為詳細的描述如圖1-9所示。
JobManager和TaskManager可以通過多種方式啟動,例如,可以直接在機器上作為獨立集群啟動,也可以在容器中啟動,或者由YARN或Mesos等資源框架管理。TaskManager連接到JobManager,宣布自己可用,并被分配工作。

圖1-9 Apache Flink運行時架構詳細描述
1)JobManager
JobManager有許多與協調Flink應用程序的分布式執行相關的職責:它決定什么時候安排下一個任務(或一組任務),對完成的任務或執行失敗做出反應,協調檢查點,協調故障恢復等。始終至少要有一個JobManager。高可用性集群可能有多個JobManager,其中一個始終是leader,其他的都是standby。
JobManager是Flink集群的主進程,它由3個不同的組件組成:
(1)ResourceManager。ResourceManager負責Flink集群中的資源分配和釋放。它管理任務槽(Task Slots),任務槽是Flink集群中的資源調度單元。Flink為不同的環境和資源提供者(如YARN、Mesos、Kubernetes和獨立部署)實現了多個ResourceManager。在Standalone獨立集群中,ResourceManager只能分發可用的TaskManager的任務槽,不能自己啟動新的TaskManager。
(2)Dispatcher。Dispatcher提供了一個REST接口來提交Flink應用程序以供執行,并為每個提交的作業(通過WebUI或命令行)啟動一個新的JobMaster。它還運行Flink WebUI來提供關于作業執行的信息。
(3)JobMaster。JobMaster負責管理單個JobGraph的執行。多個作業可以在一個Flink集群中同時運行,每個作業都有自己的JobMaster。
2)TaskManager
TaskManagers是一個Flink集群的工作(worker)進程,負責執行數據流的任務,并緩沖和交換數據流。關于TaskManager,有以下幾點要求:
(1)必須始終至少有一個TaskManager。
(2)TaskManager中最小的資源調度單位是任務槽。
(3)TaskManager的任務槽數量表示并發處理的任務數。注意,多個操作符可以在一個任務槽中執行。
(4)TaskManager啟動后,TaskManager將其槽位注冊到ResourceManager。當得到ResourceManager的指示時,TaskManager會將一個或多個它的槽位提供給JobMaster。
(5)JobMaster可以將任務分配給這些槽以執行它們。
(6)在執行過程中,一個TaskManager與運行同一應用程序任務的其他TaskManager交換數據。
- 微服務設計(第2版)
- Mastering Entity Framework Core 2.0
- 零基礎搭建量化投資系統:以Python為工具
- Modular Programming with Python
- Java Web開發之道
- HTML5+CSS3網站設計教程
- Java Web程序設計任務教程
- Java面向對象程序設計
- Python High Performance Programming
- Python+Tableau數據可視化之美
- Hands-On GUI Programming with C++ and Qt5
- UML2面向對象分析與設計(第2版)
- SQL Server 2012 數據庫應用教程(第3版)
- 微服務設計
- Daniel Arbuckle's Mastering Python