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 窗口算子的主要内容,如果未能解决你的问题,请参考以下文章

Flink窗口转换算子

Flink窗口转换算子

Flink流处理之窗口算子分析

4.1flink窗口算子的trigger触发器和Evictor清理器

FLINK基础(92): DS算子与窗口单流算子KeyBy

Flink 窗口延迟数据处理 AllowedLateness