03-Flink window API
目录:
window概念
window类型
window API
window概念
一般真实的流都是无界的,怎样处理无界的数据?
可以把无限的数据流进行切分,得到有限的数据集进行处理,即得到有界流
窗口(window)就是将无限流切割为有限流的一种方式,它会将流数据分发到有限大小的桶(bucket)中进行分析
window类型
时间窗口(Time Window)
滚动时间窗口(Tumbling Windows)
将数据依据固定的窗口长度对数据进行切分
时间对齐,窗口长度固定,没有重叠
滑动时间窗口(Sliding Windows)
滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成
窗口长度固定,可以有重叠
(股票预估)
会话窗口(Session Windows)
由一系列事件组合一个指定时间长度的timeout间隙组成,也就是一段时间没有接收到新数据就会生成新的窗口
特点:时间无对齐
计数窗口(Count Window)
滚动计数窗口
滑动计数窗口
window API
窗口分配器——window()方法
用.window()来定义一个窗口,然后基于这个window去做一些聚合或者其它处理操作。注意window()方法必须在keyBy之后才能使用。
Flink提供了更加简单的.timeWindow和.countWindow方法,用于定义时间窗口和计数窗口
窗口分配器(window assigner)
window()方法接收的输入参数是一个windowAssigner
windowAssigner负责将每条数据的数据分发到正确的window中
Flink提供了通用的windowAssigner
滚动窗口(tumbling window)
滑动窗口(sliding window)
会话窗口(session window)
全局窗口(global window)
窗口函数(window function)
window function 定义了要对窗口中收集的数据做的计算操作
可以分为两类
增量聚合函数(incremental aggregation functions)
每条数据到来就进行计算,保持一个简单的状态
ReduceFunction, AggregateFunction
全窗口函数(full window functions)
先把窗口所有数据收集起来,等到计算的时候会遍历所有数据
ProcessWindowFunction
附思维导图: