Flink执行图
Flink的代码编写流程为env->source->transform->sink,基本所有的代码都是大致按照图1的流程进行代码编写,当然中间也会有一些封装之类的。
Flink代码写好后,它的任务调度执行图按照生成顺序分为:逻辑流图(StreamGraph)->作业图(JobGraph)->执行图(ExecutionGraph)->物理图(Physical Graph),总共四层。
逻辑流图:根据用户通过DataStreamAPI编写的代码生成的最初的DAG图,用来表示程序的拓扑结构。这一步一般在客户端完成。 作业图:StreamGraph经过优化后生成的就是作业图(JobGraph),这是提交给JobManager 的数据结构,确定了当前作业中所有任务的划分。主要的优化为: 将多个符合条件的节点链接在一起合并成一个任务节点,形成算子链,这样可以减少数据交换的消耗。JobGraph一般也是在客户端生成的,在作业提交时传递给JobMaster。 执行图:JobMaster收到JobGraph后,会根据它来生成执行图(ExecutionGraph)。ExecutionGraph 是JobGraph的并行化版本,是调度层最核心的数据结构。 物理图:JobMaster 生成执行图后,会将它分发给 TaskManager;各个 TaskManager 会根据执行图部署任务,最终的物理执行过程也会形成一张“图”,一般就叫作物理图(Physical Graph)。这只是具体执行层面的图,并不是一个具体的数据结构。