1、WordCount程序實例

2、本地監聽9000端口后測試結果

3、job提交流程

4、local模式執行StreamGraph任務

5、流程分析
flink job提交流程個人理解可以大致分為定義和提交兩個環節:以下以WordCount程序為例進行分析
5.1 定義流程
流程定義包含執行環境構建和算法流程定義:
5.1.1 執行環境構建
執行環境是整個flink程序執行的上下文,記錄其相關配置,並提供一系列方法,如讀取輸入流等,同時提供execute真正開啟提交計算的入口。

下面具體來看getExecutionEnvironment方法

本地運行時,其實執行的是createStreamExecutionEnvironment方法

繼續往下看發現不斷重載createLocalEnvironment方法,最終new了一個LocalStreamEnvironment對象,並設置其並行度等於當前機器的CPU核心數

至此執行環境構建完畢,返回一個LocalStreamEnvironment對象

5.1.2 算法流程定義
算法流程簡單來說通常包含三個部分:定義source、operator和sink,對應到示例程序為socketTextStream、(flatMap、keyBy、sum)和print三部分
首先:socketTextStream其本質是向執行環境中添加了SocketTextStreamFunction作為source


其次:faltMap、keyBy和sum其本質是向執行環境中添加FlatMapFunction、KeySelector和AggregationFunction三種算子




下面分別為keyBy和sum的關鍵細節



最后:print其本質是向執行環境中添加PrintSinkFunction作為sink

5.2 提交任務
提交任務個人理解又包含client提交作業和Executor提交作業兩部分
5.2.1 第一個環節client根據流程定義提交作業如job提交流程圖所示
這個過程其實又可以可以分為兩部分:生成StreamGraph和executeAsync兩部分:
首先看生成StreamGraph部分,這一部分比較簡單,將執行環境中定義好的流程參數構建出StreamGraph即可,核心細節如下:


executeAsync部分其實就是加載一個PipelineExecutor提交StreamGraph,細節如下:


5.2.2 第二個環節Executor提交作業部分源碼如下:

本地模式主要包含了以下環節:
1> 由StreamGraph生成JobGraph
2> 創建啟動miniCluster集群,啟動JobMaster等等
3> 提交任務到JobMaster
