flink面試題高階1
使用者提交的Flink Job會被轉化成一個DAG任務執行,分別是:StreamGraph、JobGraph、ExecutionGraph,Flink中JobManager與TaskManager,JobManager與Client的互動是基於Akka工具包的,是通過訊息驅動。整個Flink Job的提交還包含著ActorSystem的建立,JobManager的啟動,TaskManager的啟動和註冊。
2. Flink所謂"三層圖"結構是哪幾個"圖"?
一個Flink任務的DAG生成計算圖大致經歷以下三個過程:
StreamGraph 最接近程式碼所表達的邏輯層面的計算拓撲結構,按照使用者程式碼的執行順序向StreamExecutionEnvironment新增StreamTransformation構成流式圖。
JobGraph 從StreamGraph生成,將可以串聯合並的節點進行合併,設定節點之間的邊,安排資源共享slot槽位和放置相關聯的節點,上傳任務所需的檔案,設定檢查點配置等。相當於經過部分初始化和優化處理的任務圖。
ExecutionGraph 由JobGraph轉換而來,包含了任務具體執行所需的內容,是最貼近底層實現的執行圖。
3. JobManger在叢集中扮演了什麼角色?
JobManager 負責整個 Flink 叢集任務的排程以及資源的管理,從客戶端中獲取提交的應用,然後根據叢集中 TaskManager 上 TaskSlot 的使用情況,為提交的應用分配相應的 TaskSlot 資源並命令 TaskManager 啟動從客戶端中獲取的應用。JobManager 相當於整個叢集的 Master 節點,且整個叢集有且只有一個活躍的 JobManager ,負責整個叢集的任務管理和資源管理。JobManager 和 TaskManager 之間通過 Actor System 進行通訊,獲取任務執行的情況並通過 Actor System 將應用的任務執行情況傳送給客戶端。同時在任務執行的過程中,Flink JobManager 會觸發 Checkpoint 操作,每個 TaskManager 節點 收到 Checkpoint 觸發指令後,完成 Checkpoint 操作,所有的 Checkpoint 協調過程都是在 Fink JobManager 中完成。當任務完成後,Flink 會將任務執行的資訊反饋給客戶端,並且釋放掉 TaskManager 中的資源以供下一次提交任務使用。
JobManager的職責主要是接收Flink作業,排程Task,收集作業狀態和管理TaskManager。它包含一個Actor,並且做如下操作:
RegisterTaskManager: 它由想要註冊到JobManager的TaskManager傳送。註冊成功會通過AcknowledgeRegistration訊息進行Ack。
SubmitJob: 由提交作業到系統的Client傳送。提交的資訊是JobGraph形式的作業描述資訊。
CancelJob: 請求取消指定id的作業。成功會返回CancellationSuccess,否則返回CancellationFailure。
UpdateTaskExecutionState: 由TaskManager傳送,用來更新執行節點(ExecutionVertex)的狀態。成功則返回true,否則返回false。
RequestNextInputSplit: TaskManager上的Task請求下一個輸入split,成功則返回NextInputSplit,否則返回null。
JobStatusChanged: 它意味著作業的狀態(RUNNING, CANCELING, FINISHED,等)發生變化。這個訊息由ExecutionGraph傳送。
5. TaskManager在叢集中扮演了什麼角色?