Windows定义
无界流 - 进行拆分成buckets ,得到有限的数据集 =>有界流
Windows 计算是流式计算中非常常用的数据计算方式之一,通过按照固定时间或长度将数据流切分成不同窗口,然后对数据进行相应的聚合运算,从而得到一定时间范围内的统计结果。
eg:
例如统计最近5min 内某基站的呼叫数,此时基站的数据在不断地产生,但是通过5min中的窗口将数据限定在固定。
时间范围内,就可以对该范围内的有界数据执行聚合处理,得出最近5min的基站的呼叫数量。
Windows分类
keyed Window
keyed Window's API.keyBy:带key的窗口必须执行的步骤
.windows: 分配器,决定分配到哪一个窗口
[trigger]:触发器,
[evictor]:
[allowedLateness]:允许延迟的时间
[sideOutputLateData]
[reduce/aggregate/fold/apply()
[getSideOutput()]
Non-Keyed Window
Non-Keyed Window-API总结
- 是否keyBy
steam.keyBy().window(...).
steam.windowALL(...).
- 时间 Time-based Windows(与数量无关)
- 数量: Count-based Windows (按元素的个数划分窗口数)
基于时间与基于数量的关系图表
Windwo Assigner(窗口分配器)
负责将每一进来的元素分配到一个或多个窗口中。
一般是在window或windowALL里设置Assigner。
基于时间与基于数量的窗口:
- 窗口分配器可分为四大类型:
滚动窗口
滑动窗口
session窗口
全局窗口 - 自定义窗口分配器(继承WindwosAssigner)
滚动窗口(Tumbling Window)
滚动窗口是根据固定大小进行切分, 窗口间的元素互不重叠,这类窗口最大特点是比较简单,只需要指定一个窗口长度(window size)
例:每个5s产生新的窗口统计基站的日志数量
实现:
image.png
滑动窗口(Sliding Window)
滑动窗口也是一种比较常见的窗口类型,设置窗口大小(windows size)+窗口滑动时间(Slide TIme), 且允许窗口数据发生重叠。
当Windows size固定之后,窗口并不像滚动窗口按照windows Size向前移动,而是根据设定的Slide Time 向前滑动。
-
重叠发生
窗口之间的数据重叠大小根据Windows Size和Slide Time决定,当SlideTime<Windows size便会发生窗口重叠
例:
滑动窗口:窗口大小10一个窗口,分1秒滑动一次生成新窗口
代码:
image.png
image.png
会话窗口(Session Window)
会话窗口主要是将某段时间内活跃度较高的数据聚合成一个窗口进行计算, 窗口的触发的条件是Session Gap(规定时间),即在规定的时间内如果没有数据活跃接入,则认为窗口结束,然后触发窗口计算结果。
- 如果数据一直不间断地进入窗口,也会导致窗口始终不触发
- 与滑动窗口不同的是,Session Windows不需要有固定Window size和slide tinme,需要定义SEssion gap,来规定不活跃数据的时间上限
全局窗口(用途较少,待补充)
windows生命周期
基于时间的窗口
- 根据设置的结束时间来管理windows的生命周期
- 如果设置的延迟时间,则可在延迟时间后再结束窗口
global类窗口(待续)
...
网友评论