Apache Flink的架構流程@TOC
Apache Flink的架構流程
Apache Flink 是為分布式、高性能、随時可用以及準确的流處理應用程式打造的開源流處理架構。實作了魚與熊掌兼得的實時計算架構,它既包含了如Storm一樣的低延遲的實時計算又完成了如Spark Streaming高吞吐量保證 exactly-once 語義。
其實作流批一體,本身的流式架構實作批處理是将批處理當作特殊的流處理來實作。
下面是Apache Flink的基礎架構
這是一張再熟悉不過的圖檔,幾乎了解過Flink的社畜都知道這張圖,其中底層為資料來源、基礎環境;Flink Runtime 這層是一套統一的分布式作業執行引擎,DataStream 和 DataSet 兩套 API,分别用來編寫流作業與批作業;這兩者具有很高的靈活性但是學習成本高代碼更加多,不夠抽象;在上一層的封裝則是恰恰相反的,提供了JAVA API,Scala API, SQL API(已經從弟弟更新為一級API)。
Flink Standalone 模式
1)Standalone 模式可以是單機版也可以是分布式
2)Standalone 具體的送出流程:
首先,由Flink Cluster Client送出job graph到Master,在Master中先經過Dispacher;Dispacher産生JobManager,JobManager将向Standalone ResourceManager申請資源,啟動Task Manager
在Master中,Standalone ResourceManager主要作用是對資源進行管理;
TaskManager 啟動之後,會有一個注冊的過程,注冊之後Job Manager 再将具體的 Task 任務分發給這個 TaskManager 去執行。
下面就具體談談其中的細節:
1、JobManager
JobManager 的功能主要有:
● 将 JobGraph 轉換成 Execution Graph,最終将 Execution Graph 拿來運作;
● Scheduler 元件負責 Task 的排程;
● Checkpoint Coordinator 組 件 負 責 協 調 整 個 任 務 的 Checkpoint, 包 括Checkpoint 的開始和完成;
● 通過 Actor System 與 TaskManager 進行通信;
● 其它的一些功能,例如 Recovery Metadata,用于進行故障恢複時,可以從Metadata 裡面讀取資料。
2、TaskManager
TaskManager 裡面的主要元件有:
● Memory & I/O Manager,即記憶體 I/O 的管理;
● Network Manager,用來對網絡方面進行管理;
● Actor system,用來負責網絡的通信;
TaskManager 被分成很多個 TaskSlot,每個任務都要運作在一個 TaskSlot裡面,TaskSlot 是排程資源裡的最小機關。
3、程式如何從Table API轉換為Job Graph
Blink以及在Flink1.9版本中與Flink合并到一起,合并後在 Flink
1.9 中會存在兩個 Planner:Flink Planner 和 Blink Planner;由于Blink是阿裡起初以流批一體為目标,建立的一個Flink的重要分支,更加符合我們的需求,是以這裡以 Blink Planner中的Job Graph作為示例。
SQL語句傳入Blink Planner中後,由解析器将SQL語句解析為 SQLNode Tree(抽象文法樹),緊接着做Validator(驗證),将文法樹放到 FunctionManger 和 CatalogManger中檢驗。 FunctionManger 主要是查詢使用者定義的 UDF,以及檢查 UDF 是否合法,CatalogManger 主要是檢查這個 Table或者 Database 是否存在。驗證通過後,将生成Operation DAG(有向無環圖)。此步驟之後,JAVA API,Scala API, SQL API将合到一處,有相同的優化和轉化步驟。
Operation DAG(有向無環圖)轉化為 RelNode( 關系表達式 ) DAG
優化器将對RelNode( 關系表達式 ) DAG進行優化,并傳送到FunctionManger 和 CatalogManger中檢驗語句的正确性,完成後生成Physical Rel DAG。
Blink Planner的優化器中batch和stream大多數的優化是共享的,但是,對 Batch 而言,它沒有 state 的概念,而對于 Stream而言,它是不支援 sort 的,是以目前 Blink Planner 中,還是運作了兩套獨立的規則集(Rule Set)。
當生成Physical Rel DAG轉化為 ExecNode DAG就是可執行的圖計算了,可以算是blink的執行層,會執行大量的 CodeGen操作(代碼編譯)和非 Code 的 Operator 操作,這将 ExecNode 轉化為 Transformation DAG。得到 Transformation DAG 後,最終會被轉化成Job Graph。
參考文獻;
Friedman E , Tzoumas K . Introduction to Apache Flink: Stream Processing for Real Time and Beyond[J]. 2016.
阿裡大神們.零基礎入門:從0到1學會Apache Flink[電子書].2019
https://yq.aliyun.com/download/4013