Flink源碼第二篇:Flink之WordCount運行流程

Flink啓動job

bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000 nc -l 9000

Job執行流程

先看一下Flink內部調度流程

640?wx_fmt=png

 

目前這個代碼沒有涉及水位watermark	
並行度設置了1,每個並行度都會維護自己的水位,後邊文章我會拿代碼給家驗證。

 

640?wx_fmt=png

時間類型

進去timewindow看一看,爲什麼說默認是proceetime,咱們進入源碼看看

640?wx_fmt=png

進入environment.getStreamTimeCharacteristic() 這個方法

640?wx_fmt=png

看看這個 return timeCharacteristic;返回的默認值是什麼?	
大家發現DEFAULT_TIME_CHARACTERISTIC賦值給了timeCharacteristic,	
咱們看看DEFAULT_TIME_CHARACTERISTIC這個默認值是什麼?

640?wx_fmt=png

默認值是 TimeCharacteristic.ProcessingTime;

640?wx_fmt=png

window觸發器

咱們點進	
.keyBy("word")	
.timeWindow(Time.seconds(5)) 	
timewindow方法

 

640?wx_fmt=png

 

進入window函數看看,返回的是windowstream

 

640?wx_fmt=png

先看看windowAssigner,它主要是控制數據所在窗口按什麼規則觸發。

640?wx_fmt=png

windowstream內部實現方法:	
獲取輸入數據	
獲取windowAssigner	
獲取出發器

640?wx_fmt=png

下面可以看到,窗口觸發之後,開始執行reduce操作

640?wx_fmt=png

點擊reduce方法,觀察實現類,發現flink內部做了2步實現	
第一步:清理改方法的歷史數據狀態,(不清除null,頂級清除top_level,遞歸清除RECURSIVE)	
第二部:返回reduce(function, new PassThroughWindowFunction<K, W, T>());

640?wx_fmt=png

 

看看new PassThroughWindowFunction<K, W, T>(),內部做了啥?

640?wx_fmt=png

execute執行器

看看execute內部執行了什麼

640?wx_fmt=png

點進去發現,執行的是個streamGraph

640?wx_fmt=png

看看getStreamGraph,它內部如何實現的,發現有一個generate()方法

640?wx_fmt=png

generater是創建builtStreamGraph

 

640?wx_fmt=png

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章