Flink流式計算框架中的窗口函數

一、窗口(window)

 

(1)一般真實的流都是無界的,怎樣處理無界的數據?

(2)可以把無限的數據流進行切分,得到有限的數據集進行處理——也就是得到有界流;

(3)窗口(window)就是將無限流切割爲有限流的一種方式,它會將流數據分發到有限大小的桶(bucket)中進行分析;

 

二、window類型

(1)時間窗口(Time Window):滾動時間窗口,滑動時間窗口,會話窗口;

(2)計數窗口(Count Window):滾動計數窗口,滑動計數窗口;

1、滾動窗口(Tumbling Windows)

1)將數據依據固定的窗口長度對數據進行切分;

2)時間對齊,窗口長度固定,沒有重疊;

2、滑動窗口(Sliding Windows)

1)滑動窗口是固定窗口更廣義的一種形式,滑動窗口由固定的窗口長度和滑動間隔組成;

2)窗口長度固定,可以重疊;

3、會話窗口(Session Windows)

1)由一系列事件組合一個指定時間長度的timeout間隙組成,也就是一段時間沒有接收到新數據就會生成新的窗口;

2)特點:時間無對齊

 

三、window  API

1、窗口分配器——window()方法

1)我們可以用.window()來定義一個窗口,然後基於這個window去做一些聚合或者其它處理操作。注意window()方法必須在keyBy之後才能用。

2)Flink提供了更加簡單的.timeWindow和.countWindow方法,用於定義時間窗口和計數窗口。

 

2、窗口分配器(window assigner)

1) window()方法接收的輸入參數是一個WindowAssigner;

2)WindowAssigner負責將每條輸入的數據分發到正確的window中;

3)Flink提供了通用的WindowAssigner:滾動窗口(tumbling  window)、滑動窗口(sliding window)、會話窗口(session window)、全局窗口(global  window);

 

3、創建不同類型的窗口

1)滾動時間窗口(tumbling time window):

                  .timeWindow(Time.seconds(15))

2)滑動時間窗口(sliding time window)

                   .timeWindow(Time.seconds(15),Time.seconds(5))

3)會話窗口(session window)

                    .window(EventTimeSessionWindows.withGap(Time.minutes(10)))

4)滾動計數窗口(tumbling count window)

                    .countWindow(5)

5)滑動計數窗口(sliding count window)

                     .countWindow(10,2)

 

4、窗口函數(window function)

(1)window function定義了要對窗口中收集的數據做的計算操作;

(2)可以分爲兩類:

              1)增量聚合函數(incremental  aggregation  functions)

                    *****每條數據到來就進行計算,保持一個簡單的狀態;

                    *****ReduceFunction,AggregateFunction

               2)全窗口函數(full  window  functions)

                    *****先把窗口所有數據收集起來,等到計算的時候會遍歷所有數據;

                    *****ProcessWindowFunction

 

5、其它可選API

(1).trigger()——觸發器

           *****定義window什麼時候關閉,觸發計算並輸出結果;

(2).evictor()——移除器

           *****定義移除某些數據的邏輯

(3).allowedLateness()——允許處理遲到的數據

(4).slideOutputLateData()——將遲到的數據放入側輸出流

(5).getSideOutput()——獲取側輸出流

 

window  API 總覽

 

 

 

 

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