Flink 源码分析(三):WordCount 程序执行

更新至 Flink 1.9.0 版本

下面以 Flink 工程自带的 wordcount 程序为例,分析应用执行。

执行环境

创建执行环境:

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

org.apache.flink.streaming.api.environment.StreamExecutionEnvironment 流式程序执行的上下文。StreamExecutionEnvironment 提供了方法控制 Job 执行(例如:设置并发、错误容忍、检查点参数)和外界交互(数据访问)。

如果在 IDE 中启动,则创建 org.apache.flink.streaming.api.environment.LocalStreamEnvironment 实例,在本地 JVM 运行。

如果在集群中启动,则创建 org.apache.flink.streaming.api.environment.RemoteStreamEnvironment 实例,在集群中运行。

生成 StreamGraph

WordCount 代码,DataStream 流转如下:

  1. Source env.fromElements(WORDS) 数据源;
  2. Transform flatMap(new Tokenizer()) 分词;
  3. Transform keyBy(0).sum(1) 计数;
  4. Sink print() 打印。

每一个 org.apache.flink.streaming.api.datastream.DataStream 实例都有一个表示创建该 DataStream 的算子 org.apache.flink.api.dag.Transformation

Transformation 及其子类:

在程序执行 env.execute("Streaming WordCount") ,会先通过 org.apache.flink.streaming.api.graph.StreamGraphGenerator 生成 org.apache.flink.streaming.api.graph.SteamGraph 实例。

生成的 StreamGraph 如下图所示:

生成 JobGraph

TODO