flinkTrigger基础认识

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()

原理是:

待研究。。。。

以上为本人经过查找资料和测试的来,欢迎同学指正,一起进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值