Flink窗口
一、窗口介绍
1.1 Window:时间窗口
滚动窗口(Tumbling Window)将事件拆分成固定长度,窗口之间不重叠,窗口长度固定
例:每10s统计过去10s订单数据
滑动窗口(Sliding Window)按照滑动步长拆分成固定长度,窗口长度固定。根据指定步长(Slide)向前滑动,步长小于窗口则窗口间重叠。
例:每10s统计过去10分钟 订单数据
会话窗口(Session Window)两个窗口之间有一个间隙(Session Gap),大于间隙没收到消息,则该窗口关闭,窗口不重叠
1.2 数量窗口(Count Windows)
按照一定的数据量作为窗口统计
二、窗口使用
2.1 使用方式
有keyBy ⽤ window() api
没keyBy ⽤ windowAll() api ,并⾏度低
2.2 窗⼝分配器 Window Assigners
定义了如何将元素分配给窗⼝,负责将每条数据分发到正确的window窗⼝上
window() 的参数是⼀个 WindowAssigner,flink本身提供了Tumbling、Sliding 等Assigner
2.3 窗⼝触发器 trigger
⽤来控制⼀个窗⼝是否需要被触发
每个窗⼝分配器WindowAssigner 都有⼀个默认触发器,也⽀持⾃定义触发器
2.4 窗⼝ window function ,对窗⼝内的数据做啥
IN是输⼊类型,ACC是中间聚合状态类型,OUT是输出类型,是聚合统计当前窗⼝的数据
2.5 全窗⼝函数
apply(new processWindowFunction(){ })
描述:窗⼝先缓存该窗⼝所有元素,等窗⼝的全部数据收集起来后再触发条件计算
常⻅的全窗⼝聚合函数 windowFunction(未来可能弃⽤)、processWindowFunction(可以获取到窗⼝上下⽂ 更多信息)
WindowFunction<IN, OUT, KEY, W extends Window>
IN是输⼊类型,OUT是输出类型,KEY是分组类型,W是时间窗
如果想处理每个元素更底层的API的时候⽤,process(new KeyedProcessFunction() {processElement、onTimer})
2.6 其它知识点
一个窗口内是左闭右开
timeWindow在1.12版本过期,统⼀使⽤window。countWindow没过期