(第六弹)Flink——Flink 触发器 Trigger 详解(附案例实战源码)

       在Flink中,有两种窗口类型,一种是基于时间的窗口timeWindow,一种是基于计数的窗口countWindow。但是是否存在一种情况,如果使用timeWindow,在窗口时间内,出现大量的数据过来,对该窗口的计算产生很大的压力,那该怎么办呢?是否能够结合两种窗口进行触发呢?答案是可以的,trigger正可以达到你的要求。

 

Trigger的作用:

      就是通过自定义一些规则,例如窗口元素上限、时间上限等等,来触发窗口计算。 

 

对于trigger抽象类有如下几个方法:

      1、onElement()  :    进入窗口的每个元素都会调用该方法。

      2、onEventTime() : 事件时间timer触发的时候被调用。

      3、onProcessingTime() : 处理时间timer触发的时候会被调用。

      4、onMerge()  : 有状态的触发器相关,并在它们相应的窗口合并时合并两个触发器的状态,例如使用会话窗口。

      5、clear()  : 该方法主要是执行窗口的删除操作。

 

Flink也内置了一些触发器:

  • EventTimeTrigger:基于事件时间和watermark机制来对窗口进行触发计算。

  • ProcessingTimeTrigger:基于处理时间触发。

  • CountTrigger:窗口元素数超过预先给定的限制值的话会触发计算。

  • PurgingTrigger作为其它trigger的参数,将其转化为一个purging触发器。

 

实战

TriggerDemo

import org.apache.flink.streaming.api.TimeCharacteristic;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.windowing.AllWindowFunction;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值