系統的架構是整個系統的全貌,咱們要了解的是系統包含的各個模塊以及每一個模塊的指責和各個部分的相互關係。flink的架構以下圖所示:
如圖所示:flink系統包含三部分:client, jobmanager,taskmanager。html
client
程序中編寫使用的每一個算子(map, flatmap等)都會解析爲operate,Flink採用了相似責任鏈模式的方式對operator進行組合,client根據operate配置的責任鏈模式將生成程序的拓撲結構圖StreamGraph,並轉換爲JobGraph,也就是task list,而後將JobGraph提交到jobmanager,並返回。apache
jobmanager
主要負責調度 Job 並協調 Task 作 checkpoint。從 Client 處接收到 Job 和 JAR 包等資源後,會生成優化後的執行計劃,並以 Task 的單元調度到各個 TaskManager 去執行。
當job執行的時候,jobmanager將和分發的任務保持通訊,來對任務進行調度(啓動下一個task,響應完成或失敗的task)。
一個jobgraph表明一個包含一系列操做(operators用jobvertex表示)和中間數據(intermediateDataset)的數據流, 每一個operator具備屬性,好比說執行的並行度。除此以外,jobgraph包含一系列的和運行相關的庫。
當jobmanager接收Jobgraph,當jobmanager將jobgrph轉換爲ExecutionGraph。ExecutionGraph是一個並行的Jobgrph。每個jobVerter,將被轉換爲一個ExecutionVetex。一個並行度爲100的operate將被轉換爲1個jobvertex和100個ExecutionVertices。ExecutionVertex追蹤subtask的狀態。一個jobvetex中轉換的全部的ExecutionVertices,包含在一個ExecutionJobVertex中,維護一個狀態。除了vertics,ExecutionGraph還包含termediateResult和inteermediateResultPations。架構
參考文檔優化