天天看點

Flink JobManager 和 TaskManager 原理

1

概述

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

所有元件之間的通信都是借助于 Akka Framework,包括任務的狀态以及 Checkpoint 觸發等資訊。

Flink JobManager 和 TaskManager 原理

2

Client 用戶端

用戶端負責将任務送出到叢集,與 JobManager 建構 Akka 連接配接,然後将任務送出到 JobManager,通過和 JobManager 之間進行互動擷取任務執行狀态。

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

Flink JobManager 和 TaskManager 原理

3

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 中的資源以供下一次送出任務使用。

Flink JobManager 和 TaskManager 原理

4

TaskManager

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

用戶端通過将編寫好的 Flink 應用編譯打包,送出到 JobManager,然後 JobManager 會根據已注冊在 JobManager 中 TaskManager 的資源情況,将任務配置設定給有資源的 TaskManager節點,然後啟動并運作任務。

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

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