Apache Flink 是一个用于分布式流处理和批处理的开源框架,它的核心概念之一是使用一系列层次化的执行图来抽象和优化用户的流处理作业。以下是 Flink 中作业图和执行图的详细介绍:
-
StreamGraph(逻辑流图)
- StreamGraph 是用户编写的应用程序代码转换成的第一个图表示形式。当用户通过 Flink 的 DataStream 或 DataSet API 编写程序时,Flink 会根据程序中定义的数据源、转换操作(例如 map、filter、join 等)和数据接收器生成一个 StreamGraph。
- 它反映了程序的原始拓扑结构,包含了所有算子(Operator)及其之间的数据流关系,但并未包含任何关于并行度或其他执行层面的细节。
-
JobGraph(作业图)
- JobGraph 是 StreamGraph 经过优化后的版本,是 Flink 客户端提交给 JobManager 的数据结构。
- 在生成 JobGraph 的过程中,Flink 会对 StreamGraph 进行一系列优化,比如合并连续的同类算子、设置并行度等。
- JobGraph 包含了具体的并行任务(JobVertex),每个 JobVertex 对应了一个或者多个具有相同逻辑的 Operator,同时连接 JobVertex 的边则代表了数据流通道。
-
ExecutionGraph(执行图)
- ExecutionGraph 是 JobManager 根据 JobGraph 创建的实际执行计划,它是 Flink 执行引擎的核心数据结构。
- ExecutionGraph 更进一步细化