Flink-时间窗口-Windows

2021-11-23  本文已影响0人  卡门001

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。
基于时间与基于数量的窗口:

滚动窗口(Tumbling Window)

滚动窗口是根据固定大小进行切分, 窗口间的元素互不重叠,这类窗口最大特点是比较简单,只需要指定一个窗口长度(window size)
例:每个5s产生新的窗口统计基站的日志数量

滚动窗口
实现:
image.png
滑动窗口(Sliding Window)

滑动窗口也是一种比较常见的窗口类型,设置窗口大小(windows size)+窗口滑动时间(Slide TIme), 且允许窗口数据发生重叠。
当Windows size固定之后,窗口并不像滚动窗口按照windows Size向前移动,而是根据设定的Slide Time 向前滑动。

代码:


image.png
image.png
会话窗口(Session Window)

会话窗口主要是将某段时间内活跃度较高的数据聚合成一个窗口进行计算, 窗口的触发的条件是Session Gap(规定时间),即在规定的时间内如果没有数据活跃接入,则认为窗口结束,然后触发窗口计算结果。

session窗口 代码图
全局窗口(用途较少,待补充)

windows生命周期

基于时间的窗口

global类窗口(待续)

...

上一篇 下一篇

猜你喜欢

热点阅读