flinkTrigger是什么,为什么,怎么做,原理是
是什么:
trigger是flink窗口的触发器,也就是说它决定着什么时候窗口关闭,它有四个内置方法,
*
onElement() 方法会在窗口中每进入一条数据的时候调用一次
*
onProcessingTime() 方法会在一个ProcessingTime定时器触发的时候调用
*
onEventTime()方法会在一个EventTime定时器触发的时候调用
*
clear()方法会在窗口清除的时候调用
比如说在一个对学生分数进行keyby–window(time)–sum的计算中,触发窗口的是一个定时器,但是假如我需要窗口在一些特殊情况结束运算,那该怎么办,在trigger的四个方法里,除了clear()外的其他三个方法都用于关闭窗口,大多数情况我们的自定义窗口关闭会在onElement()中完成,因为数据会进入该方法,我们的操作空间更广。
怎么做:
我们怎么做到自定义关闭窗口?
在可以控制窗口关闭的三个方法返回值都是枚举类TriggerResult,现在我们来认识一下TriggerResult枚举类的四个枚举值
- CONTINUE:
表示对窗口不执行任何操作。 - FIRE:
表示对窗口中的数据按照窗口函数中的逻辑进行计算,并将结果输出。注意计算完成后,窗口中的数据并不会被清除,将会被保留。 - PURGE:
表示将窗口中的数据和窗口,运算抛弃。 - FIRE_AND_PURGE:
表示先将数据进行计算,输出结果,然后将窗口中的数据和窗口进行清除。与PURGE相比该窗口是有数据输出的
我做实验(keyby–window(time)–sum)的结果
1:onElement:100条数据,window后数据为0
2:FIRE:100条数据,window后的数据就有100,数据中每条结果都是sum过后的
3:PURGE:100条数据,window后数据为0
4:FIRE_AND_PURGE:100条数据,window后数据为100,每条数据都是没有进行sum
clear()方法会在窗口结束的时候调用,并不受FIRE_AND_PURGE中清除窗口的影响,也就是说,就算在onElement中返回FIRE_AND_PURGE,也不过进入到clear()方法。我们想做到自定义清楚窗口需要灵活使用CONTINUE与其他枚举类进行判断使用。还有我们在trigger窗口内设置的ValueState值会在下一个窗口来之前置空。
为什么:
FIRE_AND_PURGE进行窗口清楚的时候不会进入clear()
原理是:
待研究。。。。
以上为本人经过查找资料和测试的来,欢迎同学指正,一起进步
4637

被折叠的 条评论
为什么被折叠?



