1 TimeWindow
TimeWindow
是将指定时间范围内的所有数据组成一个
window
,一次对一个
window
里面的所有数据进行计算。
1.
滚动窗口
Flink
默认的时间窗口根据
Processing Time
进行窗口的划分,将
Flink
获取到的
数据根据进入
Flink
的时间划分到不同的窗口中。
时间间隔可以通过
Time.milliseconds(x)
,
Time.seconds(x)
,
Time.minutes(x)
等其
中的一个来指定。
2.
滑动窗口(
SlidingEventTimeWindows
)
滑动窗口和滚动窗口的函数名是完全一致的,只是在传参数时需要传入两个参
数,一个是
window_size
,一个是
sliding_size
。
下面代码中的
sliding_size
设置为了
5s
,也就是说,每
5s
就计算输出结果一次,
每一次计算的
window
范围是
15s
内的所有元素
时间间隔可以通过
Time.milliseconds(x)
,
Time.seconds(x)
,
Time.minutes(x)
等其
中的一个来指定。
2 CountWindow
CountWindow
根据窗口中相同
key
元素的数量来触发执行,执行时只计算元素
数量达到窗口大小的
key
对应的结果。
注意:
CountWindow
的
window_size
指的是相同
Key
的元素的个数,不是输入
的所有元素的总数。
1
滚动窗口
默认的
CountWindow
是一个滚动窗口,只需要指定窗口大小即可,当元素数量
达到窗口大小时,就会触发窗口的执行。
2 滑动窗口
滑动窗口和滚动窗口的函数名是完全一致的,只是在传参数时需要传入两个参
数,一个是
window_size
,一个是
sliding_size
。
下面代码中的
sliding_size
设置为了
2
,也就是说,每收到两个相同
key
的数据
就计算一次,每一次计算的
window
范围是
10
个元素。
3 window function
window function
定义了要对窗口中收集的数据做的计算操作,主要可以分为两
类:
⚫
增量聚合函数(
incremental aggregation functions
)
每条数据到来就进行计算,保持一个简单的状态。典型的增量聚合函数有
ReduceFunction, AggregateFunction
。
⚫
全窗口函数(
full window functions
)
先把窗口所有数据收集起来,等到计算的时候会遍历所有数据。
ProcessWindowFunction
就是一个全窗口函数。
4
其它可选
API
⚫
.trigger()
—— 触发器
定义
window
什么时候关闭,触发计算并输出结果
⚫
.evitor()
—— 移除器
定义移除某些数据的逻辑
⚫
.allowedLateness()
—— 允许处理迟到的数据
⚫
.sideOutputLateData()
—— 将迟到的数据放入侧输出流
⚫
.getSideOutput()
—— 获取侧输出流