- 1、窗口的分类
- 1.1、基于时间的窗口
- 1.2、基于事件个数的窗口
- 2、时间语义
- 3、WaterMark(水位线)
- 3.1、WaterMark策略
- 3.2、WaterMark与窗口
- 4、其它
- 将 无界限的 数据 切分为 有界限的 数据
- https://yellow520.blog.csdn.net/article/details/121288240
基于时间的滑动窗口
.window(SlidingProcessingTimeWindows.of(Time.seconds(6),Time.seconds(3)))
基于时间的滚动窗口
.window(TumblingProcessingTimeWindows.of(Time.seconds(3)))
基于时间的会话窗口
.window(ProcessingTimeSessionWindows.withGap(Time.seconds(2)))
基于时间的全局窗口
.window(GlobalWindows.create())1.2、基于事件个数的窗口
基于事件个数的滑动窗口
.countWindow(4,3)
基于事件个数的滚动窗口
.countWindow(4)2、时间语义
| 时间语义 | 直译 | 说明 |
|---|---|---|
| Event Time | 时间时间 | 事件发生的时间 |
| Process Time | 处理时间 | 事件发生后,进入到程序(窗口) |
事 件 时 间 < 处 理 时 间 事件时间<处理时间 事件时间<处理时间
3、WaterMark(水位线)- WaterMark,可译为水位线,用来标记水流的事件时间进度
- WaterMark作为数据流的一部分在流动,并且携带一个时间戳t
WaterMark(t)表示流的事件时间已经到达t,后续数据的事件时间应当大于t
有序流中的水印
3.1、WaterMark策略 3.2、WaterMark与窗口乱序流中的水印
W(t)表示流的事件时间已经到达t,后续不应出现时间时间小于t的数据
- WaterMark触发窗口计算
- 窗口允许迟到的数据
- 侧输出流(sideOutput):处理关窗之后到达的数据
- W a t e r M a r k ≥ 窗 口 结 束 时 间 WaterMark ge 窗口结束时间 WaterMark≥窗口结束时间 ,会触发窗口计算
-
窗
口
结
束
时
间
<
W
a
t
e
r
M
a
r
k
<
(
窗
口
结
束
时
间
+
允
许
迟
到
时
间
)
窗口结束时间 lt WaterMark lt (窗口结束时间 + 允许迟到时间)
窗口结束时间
- W a t e r M a r k ≥ ( 窗 口 结 束 时 间 + 允 许 迟 到 时 间 ) WaterMark ge (窗口结束时间 + 允许迟到时间) WaterMark≥(窗口结束时间+允许迟到时间) ,会关闭窗口
| 窗口函数 | 窗口关闭时,窗口函数就去处理窗口中的每个元素 |
|---|---|
| ReduceFunction | 增量处理,高效 |
| AggregateFunction | 增量处理,高效 |
| ProcessWindowFunction | 函数执行前要在内部缓存窗口上所有的元素,低效 |
| Keyed vs Non-Keyed Windows | 比较 |
|---|---|
| 在keyed streams上使用窗口 | 在non-keyed stream上使用窗口 |
| 在non-keyed stream上使用窗口 | 并行度=1 |
多并行度下WaterMark的更新和传递
从所有分区中取事件时间最小的WaterMark来广播WaterMark
| en | | cn |
|---|---|---|
| watermark | ˈwɔːtərmɑːrk | n. 水印;水位标志;vt. 在……上印水印(图案) |
| gap | ɡæp | n. 缝隙,缺口;(时间上的)间隔 |
| tumbling | ˈtʌmblɪŋ | n. 翻腾运动 |
| tumble | ˈtʌmbl | v. 翻滚;n. 跌倒,滚落;(数量、价值)暴跌;混乱,杂乱;翻跟头 |
| in order | 按顺序 | |
| out of order | 次序颠倒 |



