Flink | 想要對(duì)數(shù)據(jù)加窗口,通過什么調(diào)用方法實(shí)現(xiàn)?
我們?nèi)绻胍獙?duì)數(shù)據(jù)加窗口可以調(diào)用以下兩種方法

window方法
僅針對(duì)keyby后的流可以使用
對(duì)分流后的每個(gè)子流加窗口


如圖,可見有8個(gè)快捷方法可以使用
底層是幫組我們調(diào)用的window和windowAll方法
具體根據(jù)需要使用即可
windowAll方法
使用了keyby分流后的流或者未使用keyby分流后的流,均可使用
作用是:對(duì)數(shù)據(jù)進(jìn)行加窗口操作,并且會(huì)忽略是否進(jìn)行了keyby分流
區(qū)別在于:
使用keyby分流后的流如果調(diào)用windowAll, 相當(dāng)于未分流的效果, Flink會(huì)忽略分流后的各個(gè)子流,而是將全量數(shù)據(jù)一起進(jìn)行窗口計(jì)算
而未使用keyby分流后的數(shù)據(jù),只能調(diào)用windowAll方法,無法調(diào)用window方法

這兩個(gè)方法均需要傳入一個(gè)WindowAssigner對(duì)象的實(shí)例
WindowAssigner對(duì)象就是指窗口的類型具體是什么?是時(shí)間窗口還是計(jì)數(shù)窗口還是會(huì)話窗口

如圖,WindowAssigner是一個(gè)抽象類,我們不能直接實(shí)例化它,一般使用它的子類

如圖,這些是WindowAssigner的一些子類
我們一般常用的有:
TumblingEventTimeWindows 滾動(dòng)時(shí)間窗口, 以event時(shí)間為時(shí)間依據(jù)
實(shí)例化方式:TumblingEventTimeWindows.of(滾動(dòng)窗口時(shí)間)
TumblingProcessingTimeWindows 滾動(dòng)時(shí)間窗口, 以processing時(shí)間為依據(jù)
實(shí)例化方式:TumblingProcessingTimeWindows.of()
SlidingEventTimeWindows 滑動(dòng)時(shí)間窗口, 以event時(shí)間為依據(jù)
實(shí)例化方式:SlidingEventTimeWindows of(窗口長(zhǎng)度, 滑動(dòng)距離)
SlidingProcessingTimeWindows 滑動(dòng)時(shí)間窗口, 以processing時(shí)間為依據(jù)
實(shí)例化方式:SlidingProcessingTimeWindows.of(窗口長(zhǎng)度, 滑動(dòng)距離)
GlobalWindows 全局窗口, 滾動(dòng)計(jì)數(shù), 滑動(dòng)計(jì)數(shù)均使用這個(gè)窗口來實(shí)現(xiàn)
實(shí)例化方式:GlobalWindows.create()
EventTimeSessionWindows 會(huì)話時(shí)間窗口, 以event時(shí)間為依據(jù)
實(shí)例化方式:EventTimeSessionWindows.withGap(會(huì)話gap時(shí)間)
ProcessingTimeSessionWindows 會(huì)話時(shí)間窗口, 以processing時(shí)間為依據(jù)
實(shí)例化方式:ProcessingTimeSessionWindows.withGap(會(huì)話gap時(shí)間)
