1、WordCount程序实例
flink1.10版local模式提交job流程分析-LMLPHP
2、本地监听9000端口后测试结果
flink1.10版local模式提交job流程分析-LMLPHP
3、job提交流程
flink1.10版local模式提交job流程分析-LMLPHP
4、local模式执行StreamGraph任务
flink1.10版local模式提交job流程分析-LMLPHP
5、流程分析
flink job提交流程个人理解可以大致分为定义和提交两个环节:以下以WordCount程序为例进行分析
5.1 定义流程
流程定义包含执行环境构建和算法流程定义:
5.1.1 执行环境构建
执行环境是整个flink程序执行的上下文,记录其相关配置,并提供一系列方法,如读取输入流等,同时提供execute真正开启提交计算的入口。
flink1.10版local模式提交job流程分析-LMLPHP
下面具体来看getExecutionEnvironment方法
flink1.10版local模式提交job流程分析-LMLPHP
本地运行时,其实执行的是createStreamExecutionEnvironment方法
flink1.10版local模式提交job流程分析-LMLPHP
继续往下看发现不断重载createLocalEnvironment方法,最终new了一个LocalStreamEnvironment对象,并设置其并行度等于当前机器的CPU核心数
flink1.10版local模式提交job流程分析-LMLPHP
至此执行环境构建完毕,返回一个LocalStreamEnvironment对象
flink1.10版local模式提交job流程分析-LMLPHP
5.1.2 算法流程定义
算法流程简单来说通常包含三个部分:定义source、operator和sink,对应到示例程序为socketTextStream、(flatMap、keyBy、sum)和print三部分
首先:socketTextStream其本质是向执行环境中添加了SocketTextStreamFunction作为source
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
其次:faltMap、keyBy和sum其本质是向执行环境中添加FlatMapFunction、KeySelector和AggregationFunction三种算子
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
下面分别为keyBy和sum的关键细节
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
最后:print其本质是向执行环境中添加PrintSinkFunction作为sink
flink1.10版local模式提交job流程分析-LMLPHP
5.2 提交任务
提交任务个人理解又包含client提交作业和Executor提交作业两部分
5.2.1 第一个环节client根据流程定义提交作业如job提交流程图所示
这个过程其实又可以可以分为两部分:生成StreamGraph和executeAsync两部分:
首先看生成StreamGraph部分,这一部分比较简单,将执行环境中定义好的流程参数构建出StreamGraph即可,核心细节如下:
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
executeAsync部分其实就是加载一个PipelineExecutor提交StreamGraph,细节如下:
flink1.10版local模式提交job流程分析-LMLPHP
flink1.10版local模式提交job流程分析-LMLPHP
5.2.2 第二个环节Executor提交作业部分源码如下:
flink1.10版local模式提交job流程分析-LMLPHP
本地模式主要包含了以下环节:
1> 由StreamGraph生成JobGraph
2> 创建启动miniCluster集群,启动JobMaster等等
3> 提交任务到JobMaster

11-20 03:41