1、Window Assinger是干啥的
当你决定stream是否keyby之后,window是没有构建的,你还需要指定一个window Assinger用于定义元素如何分配到窗口中。
2、window Assinger如何指定?
Keyedstream:window(WindowAssigner)
non-keyed streams :windowAll(WindowAssigner)
window Assinger的作用:负责将每个传入的元素分配给一个或多个窗口
有了window Assinger,才会创建出各种形式的window来覆盖我们所需的各种场景,所以不用过多关注window本身的分类,关注window Assinger的分类即可。
Count-based window: 根据元素个数对数据流进行分组切片
Tumbling CountWindow(翻滚窗口)
Sliding CountWindow(滑动窗口)
Time-based window: 根据时间对数据流进行分组切片
Tumbling Window
Sliding Window
Session Window
注意:Time-based window [start,end)
3、Tumbling Windows-翻滚窗口
3.1、定义:将数据依据固定的窗口长度对数据进行切片
3.2、特点:
时间对齐
窗口长度固定
event无重叠
3.3、适用场景:
BI统计(计算各个时间段的指标)
3.4、Tumbling Windows的使用
对齐方式:默认是aligned with epoch(整点、整分、整秒等),可以通过offset参数改变对齐方式
4、Sliding Windows-滑动窗口
4.1、定义:是固定窗口的更广义的一种形式。滑动窗口由固定的窗口长度和滑动间隔组成
4.2、特点:
时间对齐
窗口长度固定
event有重叠
4.3、适用场景:
监控场景,对最近一个时间段内的统计(求某接口最近5min的失败率来决定是否要报警)
4.4、Sliding Windows的使用
对齐方式:默认是aligned with epoch(整点、整分、整秒等),可以通过offset参数改变对齐方式。
5、Session Windows
5.1、定义:
类似于web应用的session,即一段时间没有接受到新数据就会生成新的窗口(固定gap/gap fun)
5.2、特点:
时间无对齐
event不重叠
没有固定开始和结束时间
5.3、适用场景:
线上用户行为分析
5.4、Session Windows的使用
5.4.1、Gap
固定gap
动态gap(函数):实现SessionWindowTimeGapExtractor
5.4.2、特殊处理方式
session window operator为每个到达的event创建一个新窗口,如果它们之间的距离比定义的间隔更近,则将窗口合并在一起
为了能够合并, session window operator需要合并触发器和合并窗口函数,例如ReduceFunction、AggregateFunction或ProcessWindowFunction (FoldFunction不能合并)
6、Global Windows
6.1、定义:有相同key的所有元素分配给相同的单个全局窗口
6.2、必须指定自定义触发器否则没有任何意义
6.3、注意:不要跟Non-keyed Window搞混,两个不同的角度