聊聊flink的Triggers
本文主要探讨flink中的triggers。
Trigger类接受两个泛型参数,一个是元素类型,另一个是窗口类型。它定义了onElement、onProcessingTime、onEventTime、canMerge、onMerge、clear等方法,其中onElement、onProcessingTime、onEventTime方法均需返回TriggerResult。onElement方法在每个元素被添加到窗口时被调用;onProcessingTime方法在注册的处理时间计时器触发时被调用;onEventTime方法在注册的事件时间计时器触发时被调用。canMerge方法用于指示是否支持触发器状态的合并,默认返回false;onMerge方法在多个窗口合并时被触发;clear方法用于清除TriggerContext中存储的相关状态。Trigger还定义了TriggerContext和OnMergeContext接口。TriggerContext定义了注册和删除事件时间和处理时间计时器的方法,同时还定义了getCurrentProcessingTime、getMetricGroup、getCurrentWatermark、getPartitionedState、getKeyValueState等方法。OnMergeContext继承自TriggerContext,并额外定义了mergePartitionedState方法。
TriggerResult枚举用于表示触发器在onElement、onProcessingTime、onEventTime方法被调用时返回的动作。它有fire和purge两个属性,包含CONTINUE、FIRE_AND_PURGE、FIRE、PURGE四个枚举值。fire属性指示是否需要触发窗口的计算操作,而purge属性指示是否需要清理窗口的数据。CONTINUE表示不对窗口进行任何操作;FIRE_AND_PURGE表示触发窗口的计算操作并清理窗口数据;FIRE表示仅触发窗口的计算操作而不清理窗口数据;PURGE表示不触发窗口的计算操作但清理窗口数据。
EventTimeTrigger继承自Trigger,元素类型为Object,窗口类型为TimeWindow。它被SlidingEventTimeWindows、TumblingEventTimeWindows、EventTimeSessionWindows和DynamicEventTimeSessionWindows默认使用。onElement方法在window.maxTimestamp()小于或等于ctx.getCurrentWatermark()时返回TriggerResult.FIRE,否则执行ctx.registerEventTimeTimer(window.maxTimestamp())并返回TriggerResult.CONTINUE。onEventTime方法在time等于window.maxTimestamp()时返回TriggerResult.FIRE,否则返回TriggerResult.CONTINUE。onProcessingTime方法返回TriggerResult.CONTINUE。canMerge方法返回true。onMerge方法在window.maxTimestamp()大于ctx.getCurrentWatermark()时执行ctx.registerEventTimeTimer(window.maxTimestamp())。clear方法执行ctx.deleteEventTimeTimer(window.maxTimestamp())。
ProcessingTimeTrigger同样继承自Trigger,元素类型为Object,窗口类型为TimeWindow。它被SlidingProcessingTimeWindows、TumblingProcessingTimeWindows、ProcessingTimeSessionWindows和DynamicProcessingTimeSessionWindows默认使用。onElement方法执行ctx.registerProcessingTimeTimer(window.maxTimestamp())并返回TriggerResult.CONTINUE。onEventTime方法返回TriggerResult.CONTINUE。onProcessingTime方法返回TriggerResult.FIRE。canMerge方法返回true。onMerge方法在window.maxTimestamp()大于ctx.getCurrentProcessingTime()时执行ctx.registerProcessingTimeTimer(window.maxTimestamp())。clear方法执行ctx.deleteProcessingTimeTimer(window.maxTimestamp())。
NeverTrigger的onElement、onEventTime、onProcessingTime方法均返回TriggerResult.CONTINUE。GlobalWindows默认使用NeverTrigger。
CountTrigger继承自Trigger,元素类型为Object。它定义了maxCount和ReducingStateDescriptor,用于窗口计数。在onElement方法中,当计数大于或等于maxCount时,清空计数并返回TriggerResult.FIRE,否则返回TriggerResult.CONTINUE。onEventTime和onProcessingTime方法均返回TriggerResult.CONTINUE。canMerge方法返回true。onMerge方法执行ctx.mergePartitionedState(stateDesc)。clear方法执行ctx.getPartitionedState(stateDesc).clear()。
PurgingTrigger是一种包装类型的Trigger,它包装了nestedTrigger。在onElement、onEventTime、onProcessingTime方法中,如果nestedTrigger的返回结果为fire,则包装返回TriggerResult.FIRE_AND_PURGE。canMerge、onMerge、clear等方法均委托给nestedTrigger处理。
总结:Trigger接收两个泛型参数,一个是元素类型,一个是窗口类型。它定义了onElement、onProcessingTime、onEventTime、canMerge、onMerge、clear等方法,其中onElement、onProcessingTime、onEventTime均需返回TriggerResult。TriggerResult用于表示触发器在onElement、onProcessingTime、onEventTime方法被调用时返回的动作,包含fire和purge两个属性,及CONTINUE、FIRE_AND_PURGE、FIRE、PURGE四个枚举值。SlidingEventTimeWindows、TumblingEventTimeWindows、EventTimeSessionWindows和DynamicEventTimeSessionWindows默认使用EventTimeTrigger;SlidingProcessingTimeWindows、TumblingProcessingTimeWindows、ProcessingTimeSessionWindows和DynamicProcessingTimeSessionWindows默认使用ProcessingTimeTrigger;GlobalWindows默认使用NeverTrigger。CountTrigger主要用于计数类型的窗口,使用ReducingStateDescriptor进行窗口计数。PurgingTrigger是一种包装类型的Trigger,根据nestedTrigger的返回结果在需要时包装返回TriggerResult.FIRE_AND_PURGE。
docTriggers
以上就是聊聊flink的Triggers的详细内容,更多请关注深圳推广【www.sztg.com.cn】。
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
Flink报TaskManager lost是内存OOM了吗?
2026-05-12TaskManager异常退出可能由JVM堆内存OOM、Native内存泄漏、托管内存超限、外部资源竞争或大页配置冲突引发,需依序排查日志、dmesg、Flink配置、网络心跳及系统内存设置。 如果您观察到Flink集群中TaskManager进程意外退出或消失,并伴随日志中出现“TaskManagerlost”提示,该现象可能由多种底层原因引发,其中Java堆内存溢出(OOM)是典型诱因之一,但...
真董姐?Xbox新任女掌门想和PS4世代前总裁Shawn Layden聊聊
2026-04-22Xbox新任女掌门阿莎·夏尔马(Asha Sharma)在外界中的形象开始发生逆转,从刚开始上任时被外界吐槽不懂游戏,是靠微软CEO的裙带关系空降这一职位,到现在要变成玩家口中的“董姐”了。 自今年3月接替菲尔·斯宾塞出任XboxCEO以来,Asha Sharma马不停蹄地做了很多实在事。她首先公布了次世代Xbox的首个细节,近期又公开承认当前的GamePass定价太贵,暗示Game Pass降价...
聊聊prod()与cumprod()区别cumsum()
2025-08-14这篇文章主要介绍了prod()与cumprod()区别cumsum(),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 pandas.Series.cumprod官方文档 cumprod()累积连乘 Series.cumprod(axis=None,skipna=True,*args,**kwargs) #实现功能:Returncumulativeproductov...
聊聊Numpy.array中[:]和[::]的区别在哪
2025-08-14这篇文章主要介绍了在Numpy.array中[:]和[::]的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 [:]和[::]的区别蛮大的,用的好可以节省时间,下面以实例进行分析 array([:]) >>>importnumpyasnp >>> >>>x=np.array([1,2,3,4,5,6,7...
聊聊flink Table的Over Windows
2025-08-05序 本文主要研究一下flinktable的overwindows 实例代码语言:javascript代码运行次数:0运行复制Tabletable=input.window([OverWindoww].as("w"))//defineoverwindowwithaliasw.select("a,b.sumoverw,c.minoverw");//aggregateovertheoverwindoww...
聊聊终端安全加固那些事
2025-07-25序言: 如何配置内网电脑以增强安全性,并通过等保测评呢?本文将与大家探讨终端安全加固的相关事宜,希望能为您提供有用的建议。 1、账户策略 通过secpol.msc命令打开本地安全策略,进入安全设置-账户策略。 (1)密码策略 (2)密码锁定策略 (3)本地用户和组 可以使用lusrmgr.msc命令打开,或者通过右击计算机管理选项进入。 说明: 这三者结合使用,首先禁用Guest和Administ...
今天聊聊:每个 Linux 新手都应该知道的 四个命令
2025-02-21linux无处不在,但使用基于linux的技术与直接使用linux系统截然不同。如果您对linux感兴趣,但一直使用pc或mac桌面系统,并希望了解如何使用linux命令行界面(cli),那么您来对地方了。 以下是一些基本的Linux命令,简单易记,无需专业知识即可掌握。 1.ls命令ls命令(list的缩写)是您学习LinuxCLI的第一个命令。它用于显示当前目录下的文件和文件夹。例如: ls/...
聊聊:Linux的内存管理机制
2025-02-15linux内存管理的独特优势:高效利用内存资源,超越windows Linux在内存管理方面与Windows截然不同,其核心优势在于充分利用所有可用内存,包括物理内存和硬盘空间。它会主动将程序访问过的硬盘数据加载到内存中,利用内存的高速读写特性提升系统性能。相比之下,Windows仅在需要时才分配内存,无法充分利用大容量内存。这意味着Linux可以最大限度地发挥硬件投资的效益,而Windows则未...
我们一起聊聊AI模型组合指南
2025-02-07实施需要周密的计划、资源管理以及采用现代部署实践和工具。 译自aguidetomodelcomposition,作者sherlockxu。 考虑一款旨在识别和分类野生动物照片的AI驱动的图像识别应用程序。您上传一张足够时拍摄的照片,几分钟后,该应用程序不仅识别出照片中的动物,还提供了有关其物种、栖息地和保护状态的详细信息。这种应用程序可以通过模型组合构建,这是一种多个人工智能模型协作从不同角度分析...
能力对齐、长文本、Claude 3,这次聊聊大模型重点技术路径
2025-02-07文本大模型卷出新高度,claude3在数学、编程、多语言理解、视觉等多个维度超越gpt-4和上线不足一个月的gemini1.0ultra。「日新月异」已经不足以形容当下大模型技术发展之势。为了更好地分享大模型技术最新进展,2025年,本站、张江科投、张江孵化器、waiccircle 联合发起举办「大模型技术workshop」系列活动,邀请产学研一线大咖带来前沿观察与洞见。3月22日下午,上海张江纳...
