Flink Dag
1痰驱、流程簡(jiǎn)圖
image
2、流程簡(jiǎn)述
① API :
- StreamAPI: 實(shí)時(shí)流 API
- BatchApI : 批處理 API
② StreamGraph:
- 根據(jù)用戶開發(fā)的 API 邏輯構(gòu)建最原始的圖奋渔,用來表示程序的拓?fù)浣Y(jié)構(gòu)躏升;
- 具有兩個(gè)核心元素:
- StreamNode:代表 Operator,具備一些基本屬性(并行度览祖,入邊靡努,出邊)
- StreamEdge:連接 StreamNode 的邊
③ JobGraph:
- Jobgraph是 StreamGraph經(jīng)過優(yōu)化之后形成的摊崭,是提交給 JobManager 的數(shù)據(jù)結(jié)構(gòu)讼油;
- 主要的優(yōu)化是將一些直連模式Operator 進(jìn)行 chain在一起形成一個(gè)節(jié)點(diǎn),減少節(jié)點(diǎn)之間的傳輸消耗(直連模式的數(shù)據(jù)交換是基于內(nèi)存的呢簸,避免了 NIO)矮台。
- 具有三個(gè)核心元素:
- JobVertex:經(jīng)過優(yōu)化后符合條件的多個(gè)StreamNode可能會(huì)chain在一起生成一個(gè)JobVertex乏屯,即一個(gè)JobVertex包含一個(gè)或多個(gè)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傳遞給目標(biāo)JobVertex宜咒。
④ ExecutionGraph:
- ExecutionGraph是JobGraph的并行化版本惠赫,是調(diào)度層最核心的數(shù)據(jù)結(jié)構(gòu)。
- 具有五個(gè)核心節(jié)點(diǎn):
- ExecutionJobVertex:和JobGraph中的JobVertex一一對(duì)應(yīng)故黑。每一個(gè)ExecutionJobVertex都有和并發(fā)度一樣多的 ExecutionVertex汉形。
- ExecutionVertex:表示ExecutionJobVertex的其中一個(gè)并發(fā)子任務(wù),輸入是ExecutionEdge倍阐,輸出是IntermediateResultPartition概疆。
- IntermediateResult:和JobGraph中的IntermediateDataSet一一對(duì)應(yīng)。一個(gè)IntermediateResult包含多個(gè)IntermediateResultPartition峰搪,其個(gè)數(shù)等于該operator的并發(fā)度岔冀。
- IntermediateResultPartition:表示ExecutionVertex的一個(gè)輸出分區(qū),producer是ExecutionVertex概耻,consumer是若干個(gè)ExecutionEdge使套。
- ExecutionEdge:表示ExecutionVertex的輸入,source是IntermediateResultPartition鞠柄,target是ExecutionVertex侦高。source和target都只能是一個(gè)。
- Execution:是執(zhí)行一個(gè) ExecutionVertex 的一次嘗試厌杜。當(dāng)發(fā)生故障或者數(shù)據(jù)需要重算的情況下 ExecutionVertex 可能會(huì)有多個(gè) ExecutionAttemptID奉呛。一個(gè) Execution 通過 ExecutionAttemptID 來唯一標(biāo)識(shí)。JM和TM之間關(guān)于 task 的部署和 task status 的更新都是通過 ExecutionAttemptID 來確定消息接受者夯尽。