当前位置: 首页 -> 业界 -> 内容页

窗口如何确定什么时候执行触发和关闭?

发布日期:2023-08-02 11:28:58   来源:哔哩哔哩

窗口的判断是按照毫秒为单位


(资料图片仅供参考)

如果窗口长度是5秒

窗口的开始: start

窗口的结束: start + 窗口长度 -1 毫秒

比如窗口长度是5秒, 从0开始

那么窗口结束是: 0 + 5000 -1 = 4999

窗口的关闭和触发

窗口不会一直存在,当达到某些条件后,窗口就会执行触发计算 + 关闭窗口的动作

窗口的关闭和触发是两个步骤

1.触发窗口计算,对窗口内的数据进行计算

2.关闭窗口,数据无法进入窗口了

这两者是同步进行的

后面会学习到先触发,然后等待一段时间后才关闭的情况,后面再说

窗口关闭、触发的条件

每个窗口都会有:

-开始时间

-结束时间

窗口的时间单位是毫秒

如何确定数据进入哪个窗口

开始时间 和 结束时间两者结合 决定了数据是属于哪个窗口的

数据的时间要满足:

-大于等于开始时间

-小于等于结束时间

如 5秒的窗口,假设窗口开始是0,结束是5000(毫秒)

那么时间1000属于这个窗口 时间6000不属于这个窗口

时间4999属于这个窗口,时间5000不属于这个窗口

窗口如何确定执行触发和关闭

结束时间决定了窗口何时关闭和触发计算,规则是:数据的时间 满足 大于等于 结束时间 - 1毫秒

1 使用处理时间(Processing Time)的情况

如果使用处理时间,那么窗口按照系统时间进行判断

如果当前系统时间,大于等于窗口的结束时间,那么这个窗口就会被关闭,并且被触发计算

比如 0 – 5000的窗口

当系统时间走到了:大于 等于 4999就会触发窗口计算和关闭

2 使用事件时间(Event Time)的情况

如果使用事件时间,那么:

当新进入的一条数据,其事件时间大于等于某个窗口的结束时间,那么这个窗口被关闭并触发计算

比如:两个窗口 窗口A是0-5000,窗口B是5000-10000

当数据事件时间是大于等于4999(5000 – 1)的数据进来,会导致窗口A进行关闭和触发计算。

3 使用水印的情况

如果使用水印,那么:

当新进入的一条数据,其水印时间,大于等于某个窗口的结束时间,那么这个窗口被关闭并触发计算

总结

处理时间:通过当前系统时间决定窗口触发和关闭

当前系统时间会不停的向前走,所以这样的情况下,窗口的关闭和触发很稳定,比如5秒窗口,就每隔5秒触发一次

事件时间:通过进入到Flink的数据,所带的 事件时间来决定是否关闭窗口

数据如果不进入Flink,那么这个窗口就一直不会被关闭。

所以事件时间窗口的开关不稳定,取决于数据

水印时间:基于数据的事件时间,同样开闭不稳定,取决于数据是否到来以及到来的数据的事件时间是多少,后面学习水印机制的时候细说

关键词:
x
x

Copyright ?  2015-2022 华中旅游网版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com