窗口的判断是按照毫秒为单位
(资料图片仅供参考)
如果窗口长度是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,那么这个窗口就一直不会被关闭。
所以事件时间窗口的开关不稳定,取决于数据
水印时间:基于数据的事件时间,同样开闭不稳定,取决于数据是否到来以及到来的数据的事件时间是多少,后面学习水印机制的时候细说
Copyright ? 2015-2022 华中旅游网版权所有 备案号:京ICP备12018864号-26 联系邮箱:2 913 236 @qq.com