Flink Dag
1、流程简图
2、流程简述
① API :
- StreamAPI: 实时流 API
- BatchApI : 批处理 API
② StreamGraph:
- 根据用户开发的 API 逻辑构建最原始的图,用来表示程序的拓扑结构;
- 具有两个核心元素:
- StreamNode:代表 Operator,具备一些基本属性(并行度,入边,出边)
- StreamEdge:连接 StreamNode 的边
③ JobGraph:
- Jobgraph是 StreamGraph经过优化之后形成的,是提交给 JobManager 的数据结构;
- 主要的优化是将一些直连模式Operator 进行 chain在一起形成一个节点,减少节点之间的传输消耗(直连模式的数据交换是基于内存的,避免了 NIO)。
- 具有三个核心元素:
- JobVertex:经过优化后符合条件的多个StreamNode可能会chain在一起生成一个JobVertex,即一个JobVertex包含一个或多个operator,JobVertex的输入是JobEdge,输出是IntermediateDataSet。
- IntermediateResult:表示JobVertex的输出,即经过operator处理产生的数据集。producer是JobVertex,consumer是JobEdge。
- Jobedge:代表了job graph中的一条数据传输通道。source 是 IntermediateDataSet,target 是 JobVertex。即数据通过JobEdge由IntermediateDataSet传递给目标JobVertex。
④ ExecutionGraph:
- ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构。
- 具有五个核心节点:
- ExecutionJobVertex:和JobGraph中的JobVertex一一对应。每一个ExecutionJobVertex都有和并发度一样多的 ExecutionVertex。
- ExecutionVertex:表示ExecutionJobVertex的其中一个并发子任务,输入是ExecutionEdge,输出是IntermediateResultPartition。
- IntermediateResult:和JobGraph中的IntermediateDataSet一一对应。一个IntermediateResult包含多个IntermediateResultPartition,其个数等于该operator的并发度。
- IntermediateResultPartition:表示ExecutionVertex的一个输出分区,producer是ExecutionVertex,consumer是若干个ExecutionEdge。
- ExecutionEdge:表示ExecutionVertex的输入,source是IntermediateResultPartition,target是ExecutionVertex。source和target都只能是一个。
- Execution:是执行一个 ExecutionVertex 的一次尝试。当发生故障或者数据需要重算的情况下 ExecutionVertex 可能会有多个 ExecutionAttemptID。一个 Execution 通过 ExecutionAttemptID 来唯一标识。JM和TM之间关于 task 的部署和 task status 的更新都是通过 ExecutionAttemptID 来确定消息接受者。