前言
Flink关于Evictors(驱逐器)的解释不多,因为默认是在element进入Window窗口聚合之前进行移除数据,这个能够满足绝多大多数应用场景。但对于element进入Window窗口聚合后并在Trigger触发计算操作之前移除数据, 即:Evictor类中的第2个方法evictAfter(),会在什么样的场景用到,这部分解释几乎是空白,因此,在此进行一个解释,希望能帮助到有需要的Flink开发者。
注意:evictor只能使用在没有增量聚合函数作为参数的情况下。
一、Evictor是什么?
Flink 窗口模式允许特别的算子Evictor(驱逐器),应用在WindowAssigner和trigger之间。通过evictor()方法使用。
Evictor驱逐器能够在element进入Window窗口聚合之前进行移除数据或者在进入Window窗口聚合后,Trigger触发计算操作之前移除数据。
Evictor的2个方法:
evictBefore():移除窗口元素,在Window Function之前调用。
evictAfter():移除窗口元素,在Window Function之后调用。
两个方法的参数都一样,分别是:
Iterable elements:当前窗口中的元素
int size:当前窗口中的元素数量
W window:当前窗口
EvictorContext evictorContext:evict的上下文