天天看點

【原理|架構】Flink系列02:Flink整體架構-成員之間的協調一. 整體架構模型二. 架構成員三. 什麼是JobGraph

本篇希望對flink的架構有一個概念上的認識,角色之間是如何互動的。

文章目錄

  • 一. 整體架構模型
  • 二. 架構成員
    • 1. Jobmanager
    • 2. TaskManager
    • 3.Client
  • 三. 什麼是JobGraph
    • 1. 使用者程式轉換為JobGraph
    • 2. jobGraph

一. 整體架構模型

flink運作時有兩種類型的程序組成:一個JobManager和若幹個TaskManager,也是典型的主從架構。

高可用(HA)設定中可能有多個 JobManager,其中一個始終是 leader,其他的則是 standby。

角色 職責
Jobmanager 管理叢集的計算資源、job的管理與排程執行、checkpoint的協調
taskmanager 提供計算資源供job運作
Client 解析job為JobGraph對象,然後送出到Jobmanager運作,并監控Job運作的狀态

一個job被送出到叢集的過程

客戶将flink jar送出到client端,client将job解析為JobGraph執行個體,然後将jar和JobGraph一起通過RPC送出到jobmanager,送出成功後Jobmanager傳回JobClient給client,用于job的通訊,可以用來擷取job的狀态。jobmanager将job拆分成不同的task并送出到TaskManagr開始作業的運作。

【原理|架構】Flink系列02:Flink整體架構-成員之間的協調一. 整體架構模型二. 架構成員三. 什麼是JobGraph

二. 架構成員

1. Jobmanager

jobmanager程序有三個元件組成

元件 作用
ResourceManager

1. 資源管理:管理task slots。slots資源排程的機關

2. Flink 為不同的環境和資源提供者(例如 YARN、Mesos、Kubernetes 和 standalone)實作了對應的 ResourceManager

3. standalone模式中,ResourceManager 隻能配置設定可用 TaskManager 的 slots,不能啟動新的。

Dispatcher

1. 提供了一個 REST 接口,用來送出 Flink 應用程式執行,并為每個作業啟動一個新的JobMaster。

2. 運作 Flink WebUI 用來提供作業執行資訊。

JobMaster 管理單個JobGraph的執行。

Jobmanager的作用:

  • 将jobGraph轉換成Execution Graph:jobGraph隻是描述了邏輯圖,Execution Graph會将Graph拆分成不同的執行單元(task),送出到taskmanager不同的slot上。
  • 網絡通訊:jobmanager、client、taskmanager之間通過Akka(rpc通訊)實作通訊。其中Akka的核心元件Actor System實作了遠端通訊。
  • job的接收與分發
  • TaskManager的注冊:當taskmanager啟動時,它會通過akka向jobmanager進行注冊,将自己的資訊交給Jobmanager讓它維護。而且和taskmanager之間進行heartbeat操作。

2. TaskManager

【原理|架構】Flink系列02:Flink整體架構-成員之間的協調一. 整體架構模型二. 架構成員三. 什麼是JobGraph
作用 描述
作業執行 一個taskmanager中對應多個slot,對于JVM程序,一個slot其實就是一個線程,slot集其實就是線程池。
Shuffle Environment管理 當有一些算子執行需要shuffle時,需要Data Exchange。
Memory Management記憶體管理 當task在執行時,會有資料到來,這需要申請一些記憶體單元,管理這些資料,例如序列化反序列化。
Rpc通訊 通過Akka的核心實作Actor System,進行網路通訊。
Network Management網絡資料交換 通過netty實作taskmanager之間進行資料互動(上下遊或shuffle)
接受Jobmanager的資源申請 jobmanager資源的申請,taskmanager傳回申請的結果給jobmanager。

3.Client

client用于生成執行環境,進入使用者的main方法生成jobGraph對象,然後送出任務,将jobGraph和作業所依賴的包送出到jobmanager的dispacher。

三. 什麼是JobGraph

1. 使用者程式轉換為JobGraph

通過DataStream、DataSet API、Flink SQl、Table API等方式可以實作Flink job jar,執行flink run将job送出到Flink。

client接收到jar後,執行器通過反射找到指定類的main方法并執行,執行有本地執行,遠端執行,或在yarn上執行。

調用execute将程式轉換為steamGraph,接着轉換成JobGraph,然後送出到Dispatcher中。

【原理|架構】Flink系列02:Flink整體架構-成員之間的協調一. 整體架構模型二. 架構成員三. 什麼是JobGraph

2. jobGraph

使用者的程式不管是通過那種方式實作,Executor都會将抽象為streamGraph,streamGraph隻是Dataflow的一個表達,沒有描述具體執行時算子并發的操作。

JobGraph進一步描述了具體執行時算子的并發、算子之間的互動關系。同樣通過DAG的方式表達了(不同Flink接口實作的)使用者程式。JobGraph描述了job的詳情,是用戶端與叢集之間的job載體。

參考:

https://time.geekbang.org/course/detail/100058801-278258

繼續閱讀