Flink执行图是描述作业从逻辑拓扑到物理部署的转换过程的核心数据结构,分为四层结构:

执行图分层结构

  1. StreamGraph(逻辑流图)
    根据用户通过DataStream API编写的代码生成的最初DAG图,表示程序的拓扑结构,通常在客户端完成。
  2. JobGraph(作业图)
    StreamGraph经过优化后生成,提交给JobManager的数据结构。主要优化包括将符合条件的节点合并为算子链(Operator Chains),减少数据交换开销。
  3. ExecutionGraph(执行图)
    JobManager将JobGraph并行化后生成的核心调度结构,包含所有任务的并行实例、中间数据集及依赖关系。此阶段会为每个Task分配并行度,生成对应的ExecutionVertex。
  4. 物理执行图
    由TaskManager根据ExecutionGraph部署Task后形成的实际运行结构,并非具体数据结构,而是物理任务实例的拓扑关系。

关键优化机制

  • 算子链(Operator Chains)
    相同并行度且为一对一(one-to-one)数据传输的算子会被合并为一个Task,减少序列化/网络开销。
  • 数据传输形式
    分为不涉及Shuffle的One-to-one模式(如map-filter链)和需要数据重分布的Redistributing模式(如keyBy)。

运行时组件协作

JobManager负责将JobGraph转换为ExecutionGraph并调度任务,TaskManager通过Slot资源执行具体Task,最终形成物理执行图。