00:00
我们已经了解了什么是时间语义,那接下来呢,就要介绍另外一个流处理当中非常重要的概念,可以说是核心概念,那就是watermark,我们把它翻译成水位线啊,那这个概念呢,其实主要就是用来度量事件时间的,之前我们说过啊,在实际应用场景当中,一般使用的都是事件时间语义,那事件时间语义主要是用来干什么的呢?啊,那其实我们知道啊,一般都是用来开一个时间窗口,然后使用事件时间语义来表示我们当前窗口的范围,收集数据之后进行统计计算的。所以这里边呢,我们就涉及到这样几个概念,一个是水位线。还有一个事件时间,另外一个是窗口,那它们之间的关系呢,其实就是事件时间的具体度量标准是以水位线作为标志的,而事件时间的应用场景呢,就是窗口操作。所以接下来呢,我们先来讨论一下事件时间和窗口的关系到底是什么样的啊,那首先我们说事件时间到底是什么呢?简单来讲,那就是每一个数据它产生的时间点。
01:13
如果对比的话,那这就有点相当于是我们的那个商品的生产日期,它就直接印在那个包装袋上,然后接下来我们想要统计一段时间内的数据,那就相当于是统计啊一段时间内生产出来的所有的商品,那非常简单了,我们就看那个时间戳嘛,就看商品包装袋上对应的那个时间就可以了。它属于哪个时间段,我们就把它放到哪个窗口里边进行统计。这一步比较简单,那比较复杂的其实是我们到底什么时候就把这个窗口内的所有数据都收集齐了,可以统计输出一个结果了呢?按照我们时间窗口的定义啊,比如说我们统计八点到九点的所有数据。
02:01
那很显然就是到达九点整的时候,窗口就应该关闭,我们所有的数据收集齐了,计算出一个结果就可以输出了。这种思考呢啊,这就相当于我们平常坐这个班车一样啊,我们可以看到这个班车标准的这个发车,那肯定就是准点发车到九点啊,那这一班车啊,该上车的人都已经到了,那我们就直接发走了,但是我们会想啊,在实际场景里边,如果说我们直接就按这个准点发车的话,那司机到底是看什么表呢?很显然,每个车上的司机他自己都有一个表,或者说我们这个车里边就挂着一个饼。这个表都是不一样的,这就相当于是我们的系统时间嘛,所以这种准点发车的方式,这其实是处理时间与一下我们的处理方法。假如现在是事件时间怎么办呢?事件时间那就表示当前这个车里边并没有一个钟表了,我们现在就只能按照当前每一个数据上面带着的时间戳来表示我们当前的时间到底进展到了哪里啊,所以这种方式的话也比较容易的想到,但是呢,它不太符合我们的直觉。
03:13
它的方式是我们看这个时间戳,假如诶当前八点的数据来了。到了之后,诶,那我发现这个数据就表示我们当前的时间已经进展到了八点,然后啊,那八点的这个数据,它属于我们当前八点到九点的这个窗口,好他就进这一班车。注意,这要等着,那这班车什么时候发呢?那就要一直等数据来,等他的时间戳不停的推移,8.01 8.02,一直等到08:59,九点的数据来了。这个时候我就知道九点到了,我这一班车可以发车走了,所以我们看啊,当前这个事件时间和处理时间最大的区别其实就在于它对于时间的判断标准不同了,处理时间是直接看当前的系统时间,而现在的事件时间是看当前数据里边的时间戳。
04:09
我们可以用一张图把这个过程再完整的来回顾一下啊,所以接下来呢,我们这里数据连续不断的来,它里边都带着一个字段,就是数据产生的时间戳,哎,那我们看八点的数据来了之后,表示我们当前的时间就已经进展到了八点,这个时候八点到九点收集数据的这个窗口就开启了啊,我们看这个窗口它其实是前闭后开或者左闭右开,它表示是包含八点的数据,不包含九点的数据,我们这个窗口已经打开了,接下来就开始收集数据。那当然了,这个数据收集进来之后,还不会直接计算结果,因为我们还有别的数据要进来呀,啊,接下来又来了08:05的数据,表示现在的时间进展到了08:05,它同样一判断这个时间戳也属于当前八点到九点的窗口,所以也进入当前的这个窗口来,也上这一班车,08:10的数据来了之后,同样它也是推进了当前的时间,另外他也进入到了当前窗口内收集起来,最后一直到08:59:59的时候。
05:18
他表示,当前的时间推进到了08:59:59,同样这个数据也收集到窗口来,注意这里还不关闭窗口,因为我们的时间还没到,这个窗口关闭时间嘛,所以它是要等到九点整的这个数据。到来了,那么我们当前的时间就已经到达了九点,这个时候表示可以关闭之前八点到九点的这个窗口了,这一班车就发走了,要注意的是九点这个数据。他推进了我们当前时钟到达九点整,但是呢,他自己并不上这班车,他上不上这班车是要按照这个时间戳是否符合我们当前这个窗口时间范围来决定的啊,所以我们看到啊,这是两回事儿,它推进了时钟到达的这个时间点,但是这一班车并不包含它,这一班车就直接发走了啊,这就是我们整个按照事件时间去进行窗口开启和关闭进行计算的完整的过程。所以我们看到啊,在当前事件时间处理的过程中,我们其实就是自定义了一个逻辑时钟,这个逻辑时钟定义的标准其实就是基于数据的时间戳来定义的。
06:34
那么这里我们整个时间的进展向前推进的标准就是靠着新的数据到来,它的时间戳增大,那么这个时候我们的时间就向前推进了。这就是关于事件时间和窗口的关系。
我来说两句