Flink 窗口算子
Posted zgq25302111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink 窗口算子相关的知识,希望对你有一定的参考价值。
1、新建一个窗口算子需指定两个窗口组件
1)窗口分配器(window assigner),决定如何划分窗口,比如每5秒一个窗口(左闭右开区间),按照事件时间或者处理时间划分;
2)窗口函数,决定如何处理窗口中的元素
2、DataStream API 中的多种内置窗口分配器
1)滚动窗口(Tumbling Window)
默认滚动窗口会和纪元时间 1970-01-01-00:00:00:000 对齐,可以通过第二个参数指定偏移量
2)滑动窗口(Sliding Window)
需指定窗口大小以及用于定义新窗口开始频率的滑动间隔。
如果滑动间隔小于窗口大小,窗口会出现重叠,元素会分配给多个窗口;
如果滑动间隔大于窗口大小,一些元素可能不会分配给窗口,可能直接丢弃。
3)会话窗口(Session Window)
窗口长度可变且不重叠,边界由非活动间隔,即持续没有收到记录的时间间隔定义。
3、在窗口上应用函数
1)增量聚合函数
ReduceFunction
AggregateFunction 比 ReduceFunction 更加灵活,实现更复杂
2)全量窗口函数
ProcessWindowFunction
比如计算中值,众数等。
单个窗口的状态:当前正在计算的窗口实例的状态,用于维护同一窗口内多次调用 process() 方法所需共享的信息。
使用了单个窗口的状态的 ProcessWindowFunction 需实现 clear() 方法,在窗口清除前清理仅供当前窗口使用的状态。
全局状态:不属于任何一个窗口的健值分区状态,用于在健值相同的多个窗口之间共享信息。
4、自定义窗口算子
自定义分配器(assigner)、触发器(trigger)、移除器(evictor)
reference:
1 《Stream Processing with Apache Flink》
以上是关于Flink 窗口算子的主要内容,如果未能解决你的问题,请参考以下文章