Flink Dag
1、流程簡圖

image
2、流程簡述
① API :
- StreamAPI: 實時流 API
- BatchApI : 批處理 API
② StreamGraph:
- 根據(jù)用戶開發(fā)的 API 邏輯構建最原始的圖,用來表示程序的拓撲結構;
- 具有兩個核心元素:
- StreamNode:代表 Operator,具備一些基本屬性(并行度,入邊,出邊)
- StreamEdge:連接 StreamNode 的邊
③ JobGraph:
- Jobgraph是 StreamGraph經(jīng)過優(yōu)化之后形成的,是提交給 JobManager 的數(shù)據(jù)結構;
- 主要的優(yōu)化是將一些直連模式Operator 進行 chain在一起形成一個節(jié)點,減少節(jié)點之間的傳輸消耗(直連模式的數(shù)據(jù)交換是基于內(nèi)存的,避免了 NIO)。
- 具有三個核心元素:
- JobVertex:經(jīng)過優(yōu)化后符合條件的多個StreamNode可能會chain在一起生成一個JobVertex,即一個JobVertex包含一個或多個operator,JobVertex的輸入是JobEdge,輸出是IntermediateDataSet。
- IntermediateResult:表示JobVertex的輸出,即經(jīng)過operator處理產(chǎn)生的數(shù)據(jù)集。producer是JobVertex,consumer是JobEdge。
- Jobedge:代表了job graph中的一條數(shù)據(jù)傳輸通道。source 是 IntermediateDataSet,target 是 JobVertex。即數(shù)據(jù)通過JobEdge由IntermediateDataSet傳遞給目標JobVertex。
④ ExecutionGraph:
- ExecutionGraph是JobGraph的并行化版本,是調(diào)度層最核心的數(shù)據(jù)結構。
- 具有五個核心節(jié)點:
- ExecutionJobVertex:和JobGraph中的JobVertex一一對應。每一個ExecutionJobVertex都有和并發(fā)度一樣多的 ExecutionVertex。
- ExecutionVertex:表示ExecutionJobVertex的其中一個并發(fā)子任務,輸入是ExecutionEdge,輸出是IntermediateResultPartition。
- IntermediateResult:和JobGraph中的IntermediateDataSet一一對應。一個IntermediateResult包含多個IntermediateResultPartition,其個數(shù)等于該operator的并發(fā)度。
- IntermediateResultPartition:表示ExecutionVertex的一個輸出分區(qū),producer是ExecutionVertex,consumer是若干個ExecutionEdge。
- ExecutionEdge:表示ExecutionVertex的輸入,source是IntermediateResultPartition,target是ExecutionVertex。source和target都只能是一個。
- Execution:是執(zhí)行一個 ExecutionVertex 的一次嘗試。當發(fā)生故障或者數(shù)據(jù)需要重算的情況下 ExecutionVertex 可能會有多個 ExecutionAttemptID。一個 Execution 通過 ExecutionAttemptID 來唯一標識。JM和TM之間關于 task 的部署和 task status 的更新都是通過 ExecutionAttemptID 來確定消息接受者。