38、Flink 的窗口触发器(Triggers)详解

Triggers
a)概述

Trigger 决定了一个窗口(由 window assigner 定义)何时可以被 window function 处理;每个 WindowAssigner 都有一个默认的 Trigger,如果默认 trigger 无法满足需要,可以在 trigger(...) 调用自定义的 trigger。

Trigger 接口提供了五个方法来响应不同的事件

  • onElement() 方法在每个元素被加入窗口时调用。
  • onEventTime() 方法在注册的 event-time timer 触发时调用。
  • onProcessingTime() 方法在注册的 processing-time timer 触发时调用。
  • onMerge() 方法与有状态的 trigger 相关。该方法会在两个窗口合并时,将窗口对应 trigger 的状态合并,比如使用会话窗口时。
  • clear() 方法处理在对应窗口被移除时所需的逻辑。

注意

  • 前三个方法通过返回 TriggerResult 来决定 trigger 如何应对到达窗口的事件,应对方案有以下几种:
    • CONTINUE: 什么也不做
    • FIRE: 触发计算
    • PURGE: 清空窗口内的元素
    • FIRE_AND_PURGE: 触发计算,计算结束后清空窗口内的元素
  • 上面的任意方法都可以用来注册 processing-time 或 event-time timer。
b)触发(Fire)与清除(Purge)

当 trigger 认定一个窗口可以被计算时,它就会触发,也就是返回 FIREFIRE_AND_PURGE;即让窗口算子发送当前窗口计算结果的信号,如果一个窗口指定了 ProcessWindowFunction,所有的元素都会传给 ProcessWindowFunction,如果是 ReduceFunctionAggregateFunction,则直接发送聚合的结果。

当 trigger 触发时,它可以返回 FIREFIRE_AND_PURGEFIRE 会保留被触发的窗口中的内容,而 FIRE_AND_PURGE 会删除这些内容, Flink 内置的 trigger 默认使用 FIRE,不会清除窗口的状态。

Purge 只会移除窗口的内容, 不会移除关于窗口的 meta-information 和 trigger 的状态。

c)WindowAssigner 默认的 Triggers

WindowAssigner 默认的 Trigger 足以应付诸多情况;比如,所有的 event-time window assigner 都默认使用 EventTimeTrigger。 这个 trigger 会在 watermark 越过窗口结束时间后直接触发。

GlobalWindow 的默认 trigger 是永远不会触发的 NeverTrigger,在使用 GlobalWindow 时,必须自定义一个 trigger。

当在 trigger() 中指定了一个 trigger 时, 实际上覆盖了当前 WindowAssigner 默认的 trigger;如果指定了一个 CountTriggerTumblingEventTimeWindows,窗口将不再根据时间触发, 而是根据元素数量触发。

d)内置 Triggers 和自定义 Triggers

Flink 包含一些内置 trigger。

  • EventTimeTrigger 根据 watermark 测量的 event time 触发。
  • ProcessingTimeTrigger 根据 processing time 触发。
  • CountTrigger 在窗口中的元素超过预设的限制时触发。
  • PurgingTrigger 接收另一个 trigger 并将它转换成一个会清理数据的 trigger。

如果需要实现自定义的 trigger,请查看抽象类 Trigger。

复制代码
https://github.com/apache/flink/blob/release-1.19//flink-streaming-java/src/main/java/org/apache/flink/streaming/api/windowing/triggers/Trigger.java
相关推荐
跨境猫小妹7 分钟前
跨境电商深水区:价值增长新范式,重构出海增长逻辑
大数据·人工智能·重构·产品运营·跨境电商·防关联
乐迪信息27 分钟前
乐迪信息:AI摄像机识别煤矿出入井车辆数量异常检测
大数据·运维·人工智能·物联网·安全
写代码的【黑咖啡】37 分钟前
大数据环境下如何维护模型文档:策略与实践
大数据
焦糖玛奇朵婷40 分钟前
扭蛋机小程序:线上扭蛋机模式发展新形势[特殊字符]
大数据·数据库·程序人生·小程序·软件需求
番茄撒旦在上1 小时前
什么样的表适合做拉链表
大数据·数据仓库·hive
Elastic 中国社区官方博客1 小时前
在 Kibana 中可视化你的 Bosch Smart Home 数据
大数据·运维·elasticsearch·搜索引擎·信息可视化·全文检索·kibana
云老大TG:@yunlaoda3601 小时前
如何使用华为云国际站代理商的FunctionGraph进行事件驱动的应用开发?
大数据·数据库·华为云·云计算
yiersansiwu123d1 小时前
生成式AI重构内容生态,人机协同定义创作新范式
大数据·人工智能·重构
老蒋新思维1 小时前
创客匠人:从个人IP到知识变现,如何构建可持续的内容生态?
大数据·网络·人工智能·网络协议·tcp/ip·创客匠人·知识变现
Sui_Network2 小时前
Mysten Labs 与不丹王国政府的创新与技术部携手探索离线区块链
大数据·人工智能·web3·去中心化·区块链