Flink架構

1 Flink 任務提交流程

TaskManager是一個獨立的jvm進程。

每個task slot表示TaskManager擁有資源的一個固定大小的子集。假如一個TaskManager有三個slot,那麼它會將其管理的內存分成三份給各個slot。

slot就是運行在本進程下的獨立資源集合,非線程概念,slot是cpu共享,內存隔離。一個slot並不代表一個線程,它裏面並不一定只放一個task。多個task在一個slot就涉及slot sharing group。

2 Flink Yarn任務提交流程

代碼就是stream Graph或者data Graph

client生成job graph(operator chain優化,把很多串行任務合在一起,前提是one to one,類似spark的窄依賴,並且並行度要一致。代碼中env.disableOperatorChaining()可以設置不用這個優化方式。)

job manager 上生成 ExecutionGraph,並行度分開了

task manager上最終執行。

3 TaskManager和slot

雖然slot是一個線程,但是並不是一個slot只運行一個task線程, 可以根據每個task,比如source, map等如果不是資源密集型可以共享同一個線程處理,甚至某個並行度下的完整pipeline。

下圖的例子是source,map,keyby並行度都是6,sink並行度是1,最終不是需要13個slot(source,map可以自動的調整爲一個task運行),而只需要6個slot就可以了。注意圖中一個小方框才代表一個線程,而不是一個slot是一個線程。

當然可以通過sharing group來設置不同task在不同的slot裏面,可以設置一對一的關係。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章