flink (1)系統架構

系統的架構是整個系統的全貌,咱們要了解的是系統包含的各個模塊以及每一個模塊的指責和各個部分的相互關係。flink的架構以下圖所示:

如圖所示:flink系統包含三部分:client, jobmanager,taskmanager。html

  1. client
    程序中編寫使用的每一個算子(map, flatmap等)都會解析爲operate,Flink採用了相似責任鏈模式的方式對operator進行組合,client根據operate配置的責任鏈模式將生成程序的拓撲結構圖StreamGraph,並轉換爲JobGraph,也就是task list,而後將JobGraph提交到jobmanager,並返回。apache

  2. 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。架構

  1. Taskmanager
    關鍵詞:task, slot,pipeline
    flink中的執行單元是task slot, 每一個taskmanger中包含一個或者多個slot,Taskmanger在啓動的時候就設置好了槽位數slot。每一個slot能啓動一個 Task線程,能夠運行pipeline或並行任務。 一個pipeline包含多個連續的任務,好比第n個並行任務的MapFunction和ReduceFunction。flink一般執行的都是連續任務,不管是流式計算仍是批處理都是常常發生的。Taskmanager從 JobManager 處接收須要部署的 Task,部署啓動後,與本身的上游創建 Netty 鏈接,接收數據並處理。
    下面的圖中,一個程序包含一個source,一個mapfunction和一個reducefunction。source和mapfunction執行的並行度爲4,reducefunction的並行度爲3.一個pipeline的執行順序爲source->map>reduce. 在一個2個包含3個slotTaskmanager的集羣上,程序的執行圖以下所示:

參考文檔優化

  1. flink 官方文檔
  2. flilnk 實現與原理
相關文章
相關標籤/搜索