前言
与传统批处理作业方式不同,实时流的计算处理过程是连续的。所以当我们在流式作业中要做传统的阶段统计工作(求和,取均值计算)的时候,需要在逻辑上对这些数据进行分片,然后再处理。本文我们来聊聊流计算过程中按照时间的处理方式。
Window的概念
在传统批处理的作业执行方式里,我们可以一次性读取入所有的输入数据,然后经过计算,再输出结果。对于原始数据,我们可以做任意我们想做的预处理工作,包括数据项的排序等等操作。但是在实时流计算引擎下,很多东西就不会这么直接,简单了。至少,我们需要明白一个点:在连续不断的流数据中,我们如何对其进行逻辑意义上的拆分,这个拆分线我们到底怎么来划分。
按照最最常考虑到的2大维度,大小和时间。这2大维度,按照自由组合,我们可以组合出以下3种窗口类型:
- Fixed-Sized Window,固定长度窗口。
- Time Window,时间窗口。
- Fixed-Sized and Time Window,滑动窗口。
固定大小窗口和滑动窗口的效果图如下图所示。
在现实的场景中,我们用时间窗口会比较多一些,比如分时段内的数理统计需求等等。于是这里会衍生出另一个话题:按照窗口的时间计算,这个“时间”要依据的是哪个呢?