Flink Window那些事——Window小分类(Window Assinger类型)

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搞混,两个不同的角度

原文地址:https://www.cnblogs.com/linjiqin/p/12589714.html