Flink任務調度原理之TaskManager 與Slots

TaskManager 與Slots

一、作用與關係

上文講到了每一個worker(TaskManager)爲了控制能接收多少個task,worker通過task slot來進行控制(一個worker至少有一個task slot),那麼是怎麼處理的呢?話不多說先上圖
在這裏插入圖片描述
總:

  1. Flink 中每一個 TaskManager 都是一個JVM進程,它可能會在獨立的線程上執行一個或多個 subtask
  2. 爲了控制一個 TaskManager 能接收多少個 task, TaskManager 通過 task slot 來進行控制(一個 TaskManager 至少有一個 slot)
  3. 每個task slot表示TaskManager擁有資源的一個固定大小的子集。假如一個TaskManager有三個slot,那麼它會將其管理的內存分成三份給各個slot(注:這裏不會涉及CPU的隔離,slot僅僅用來隔離task的受管理內存)
  4. 可以通過調整task slot的數量去自定義subtask之間的隔離方式。如一個TaskManager一個slot時,那麼每個task group運行在獨立的JVM中。而當一個TaskManager多個slot時,多個subtask可以共同享有一個JVM,而在同一個JVM進程中的task將共享TCP連接和心跳消息,也可能共享數據集和數據結構,從而減少每個task的負載。

二、共享機制

在這裏插入圖片描述

  1. 默認情況下,Flink 允許子任務共享 slot,即使它們是不同任務的子任務(前提是它們來自同一個job)。 這樣的結果是,一個 slot 可以保存作業的整個管道。
  2. Task Slot 是靜態的概念,是指 TaskManager 具有的併發執行能力,可以通過參數taskmanager.numberOfTaskSlots進行配置;而並行度parallelism是動態概念,即TaskManager運行程序時實際使用的併發能力,可以通過參數parallelism.default進行配置
    舉例:如果總共有3個TaskManager,每一個TaskManager中分配了3個TaskSlot,也就是每個TaskManager可以接收3個task,這樣我們總共可以接收9個TaskSot。但是如果我們設置parallelism.default=1,那麼當程序運行時9個TaskSlot將只有1個運行,8個都會處於空閒狀態,所以要學會合理設置並行度!具體圖解如下(圖太大是一張圖…):
    在這裏插入圖片描述在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章