概述
Trigger
什么是Trigger?
翻译过来中文意思是触发器,显然这个解释是懵逼的,读者肯定有以下疑问,
触发什么?什么时候触发?为什么需要触发器?带着疑问我们来学习Flink
Trigger详解
-
Trigger是干嘛的呢?
- 读者在理解trigger的时候,一定要和watermark以及window联系起来,上节讲到watermark的语义是表示后来到达的数据再也没有小于这个时间了,window机制决定了对数据进行离散化,也就是决定数据属于哪一个窗口,watermark+windows用于处理数据乱序问题,那么数据处理完成后,什么时候落地呢?这就要靠Trigger
-
为什么需要Trigger?
请参考之前的文章《小白学习Flink系列–第二篇-02(流式数据模型)》,简而言之就是watermarks存在短板,这也是前文提到了,Flink需要采取一系列的机制来完善Event Time,就是Watermark和Trigger
什么时候触发Trigger?
触发Trigger的信号包含:
- Watermark的推进(也就是业务时间的推进)::当Watermark达到窗口尾部时,窗口的输出被发送。另一个例子是当时间窗口过期时,触发垃圾回收,我们将在之后重新回顾这个例子。
- 处理时间的推进:这在按一定的时间间隔更新数据时非常有用,因为处理时间不像业务时间,是稳定而无延时的。
- 元素数据:在接收到一定数量的元素就触发的场景非常有用。
- 特定符号标志:这个场景下,Trigger的触发依赖一个特定的符号数据(比如一次flush中的EOF标志)。
Trigger函数
trigger() 用来判断一个窗口是否需要被触发,每个 WindowAssigner 都自带一个默认的 trigger,如果默认的 trigger 不能满足你的需求,则可以自定义一个类,继承自 Trigger 即可,我们详细描述下 Trigger 的接口以及含义:
- onElement():每次往 window 增加一个元素的时候都会触发
- onEventTime():当 event-time timer 被触发的时候会调用
- onProcessingTime():当 processing-time timer 被触发的时候会调用
- onMerge():对两个 trigger 的 state 进行 merge 操作
- clear():window销毁的时候被调用
上面的接口中前三个会返回一个 TriggerResult,TriggerResult 有如下几种可能的选择:
- CONTINUE:不做任何事情
- FIRE:触发 window
- PURGE:清空整个 window 的元素并销毁窗口
- FIRE_AND_PURGE:触发窗口,然后销毁窗口
由于Trigger实际上经常和watermark,windows机制一一起使用,所以我会在后边的API实践中一块讲到,这片先让我们了解Trigger。
福利
看书看不懂怎么办?学习视频安排!
没有实践项目只会Demo怎么办?实践项目安排!
面试好慌怎么办?面经大全安排!
扫描下方关注,点击联系我,添加vx即可获取Flink大礼包!!
悄悄说一下,有找不到的学习资源也可以私信答主,毕竟我是行走的资源库
最后
以上就是搞怪黑米为你收集整理的小白学习Flink系列--第三篇(概念)之Trigger的全部内容,希望文章能够帮你解决小白学习Flink系列--第三篇(概念)之Trigger所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复