Flink JobManager 和 TaskManager 原理


一、概述

Flink 整個系統主要由兩個組件組成,分別為 JobManager 和 TaskManager,Flink 架構也遵循 Master - Slave 架構設計原則,JobManager 為 Master 節點,TaskManager 為 Worker (Slave)節點。

 

所有組件之間的通信都是借助於 Akka Framework,包括任務的狀態以及 Checkpoint 觸發等信息。

 

二、Client 客戶端

客戶端負責將任務提交到集群,與 JobManager 構建 Akka 連接,然后將任務提交到 JobManager,通過和 JobManager 之間進行交互獲取任務執行狀態。

 

客戶端提交任務可以采用 CLI 方式或者通過使用 Flink WebUI 提交,也可以在應用程序中指定 JobManager 的 RPC 網絡端口構建 ExecutionEnvironment 提交 Flink 應用。

 

三、JobManager

JobManager 負責整個 Flink 集群任務的調度以及資源的管理,從客戶端中獲取提交的應用,然后根據集群中 TaskManager 上 TaskSlot 的使用情況,為提交的應用分配相應的 TaskSlot 資源並命令 TaskManager 啟動從客戶端中獲取的應用。

 

JobManager 相當於整個集群的 Master 節點,且整個集群有且只有一個活躍的 JobManager ,負責整個集群的任務管理和資源管理。

 

JobManager 和 TaskManager 之間通過 Actor System 進行通信,獲取任務執行的情況並通過 Actor System 將應用的任務執行情況發送給客戶端。

 

同時在任務執行的過程中,Flink JobManager 會觸發 Checkpoint 操作,每個 TaskManager 節點 收到 Checkpoint 觸發指令后,完成 Checkpoint 操作,所有的 Checkpoint 協調過程都是在 Fink JobManager 中完成。

 

當任務完成后,Flink 會將任務執行的信息反饋給客戶端,並且釋放掉 TaskManager 中的資源以供下一次提交任務使用。

 

 

四、TaskManager

TaskManager 相當於整個集群的 Slave 節點,負責具體的任務執行和對應任務在每個節點上的資源申請和管理。

 

客戶端通過將編寫好的 Flink 應用編譯打包,提交到 JobManager,然后 JobManager 會根據已注冊在 JobManager 中 TaskManager 的資源情況,將任務分配給有資源的 TaskManager節點,然后啟動並運行任務。

 

TaskManager 從 JobManager 接收需要部署的任務,然后使用 Slot 資源啟動 Task,建立數據接入的網絡連接,接收數據並開始數據處理。同時 TaskManager 之間的數據交互都是通過數據流的方式進行的。

 

可以看出,Flink 的任務運行其實是采用多線程的方式,這和 MapReduce 多 JVM 進行的方式有很大的區別,Flink 能夠極大提高 CPU 使用效率,在多個任務和 Task 之間通過 TaskSlot 方式共享系統資源,每個 TaskManager 中通過管理多個 TaskSlot 資源池進行對資源進行有效管理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM