在构建 Pipeline 的过程中,每一步的转换操作,Flink 都将其抽象为 Transformation,最终放在 StreamExecutionEnvironment 中的一个 Transformation 数组当中。

在调用 submit 之后,StreamExecutionEnvironment 会将 Transformation 数组构建为一个 Stream Graph ( DAG )。

Stream Graph 根据中间每个 operator 的并行度,以及 operator 与 operator 之间是否是 forward 关系( 即数据分区之间是一对一 )再转换为 JobGraph。

最终 JobGraph 被提交到 JobManager 之后,会转化为具体执行的 ExecutionGraph,最终转化为物理执行图

类型推导

在 DataStream 的构建图过程中,将伴随着数据的类型推导,推导出 Transformation 的输出格式,以供 Flink 系统使用,如下图所示

基于TypeInformation可以由如下优势:

基本数据类型

除了 Java、Scala 中的基础数据类型,flink 也内置提供了 Values 类型( 是对普通数据类型的封装,包括ByteValue,ShortValue,IntValue,LongValue,FloatValue,DoubleValue,StringValue,CharValue,BooleanValue ),和普通数据类型相比,它有如下几点作用:

复合数据类型