Flink window Trigger

文章详细解释了Flink中默认窗口Trigger的行为,指出当数据停止输入时,EventTimeTrigger不会自动关闭窗口,而是持续等待数据。作者还提供了自定义Trigger的示例,用于在窗口长度达到特定倍数时关闭窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思考

flink 默认窗口Trigger,当数据不发送时,会自动关闭吗?

先说结论:当数据不发送时,不会自动关闭窗口,会一直等待数据;

感兴趣可看下方分析过程

问题分析

上述问题是使用flink 1.16.1 过程中一些疑惑点,以此记录;

进入正题window的使用方法为

stream
       .keyBy(...)               <-  keyed versus non-keyed windows
       .window(...)              <-  required: "assigner"
      [.trigger(...)]            <-  optional: "trigger" (else default trigger)
      [.evictor(...)]            <-  optional: "evictor" (else no evictor)
      [.allowedLateness(...)]    <-  optional: "lateness" (else zero)
      [.sideOutputLateData(...)] <-  optional: "output tag" (else no side output for late data)
       .reduce/aggregate/apply()      <-  required: "function"
      [.getSideOutput(...)]      <-  optional: "output tag"

可以看到Trigger为可选项,当不指定会走默认的,以滑动窗口为例,可从源码中看到默认为EventTimeTrigger

在这里插入图片描述

这样只需要查看EventTimeTrigger 逻辑即可

@PublicEvolving
public class EventTimeTrigger extends Trigger<Object, TimeWindow> {
   
   
    private static final long serialVersionUID = 1L;

    private EventTimeTrigger() {
   
   }

    @Override
    public TriggerResult onElement(
            Object element, long timestamp, TimeWindow window, TriggerContext ctx)
            throws Exception {
   
   
        if (window.maxTimestamp() <= ctx.getCurrentWatermark()) {
   
   
            // if the watermark is already past the window fire immediately
            return TriggerResult.FIRE;
        } else {
   
   
            ctx.registerEventTimeTimer(window.maxTimestamp());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值