我们都知道,Flink它是一个流式计算引擎,数据来一条它计算一次,而窗口函数,就可以理解成它把流处理转化成了批处理,把数据切分成一段一段的计算。
窗口分为两类;基于时间的窗口就是time-window,基于数量的窗口就是count-window,在往下分的话,就能分为四种窗口,分别是滚动窗口,滑动窗口,会话窗口和全局窗口。
滚动窗口;
窗口大小固定,数据不会重复(窗口不会出现重叠的现象),因为滚动窗口之间是首位相连的,
每隔1分钟计算一次;
SingleOutputStreamOperator<String> process = dataStream.keyBy(new KeySelector<Tuple2<String, Integer>, String>() {
@Override
public String getKey(Tuple2<String, Integer> value) throws Exception {
return value.f0.split(",")[0];
}
}).window(TumblingEventTimeWindows.of(Time.minutes(1))).process(...)
滑动窗口;
窗口大小固定,但不是首位相连,同一条数据可能会在不同的窗口中做计算。
每一分钟统计最近一个小时计算一次