window 计算 | 青训营笔记

127 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

一般来说,批计算被认为是所谓的“T+1”架构,意思是依靠定时任务,完整处理之前的数据,一般是以天为单位。基于这个思路,可以进一步的压缩数据处理的间隔比如半天、甚至到小时。也可以更大胆的假设到分钟级别的,这差不多就是曾经的 spark steaming 的精准度。 更进一步的就是所谓的实时计算了。 实时计算依赖所谓的window 算子,典型有三种:滚动窗口,滑动窗口,会话窗口。Flink在SQL层、DataStream层都有提供。

  • 滚动窗口

纯粹将数据切成不同的分段,每段独立计算。一个可能的例子是每5秒进行前5秒的计算任务。

  • 滑动窗口

滑动窗口的特点在于尽管同样分段,但是不一定要每段同时计算。这个的经典例子是每过10秒计算前40秒的数据结果。注意到这里和滚动窗口的相似之处,可以发现二者从某种意义上来说是有共同点的,比如以短间隔为一段计算并保留以实现计算结果的复用,这个手段也被称作pane优化。

  • 会话窗口

类似于ssh连接的session,并不严格要求所谓的时间间隔。比如当两次数据之间的间隔够远,我们认为应该分为不同的两批数据计算,这就是所谓的会话窗口。ssh中会话之间的临时环境变量之类的便是如此。 由于现在对于数据的敏感性,很多时候实时计算并不是使用数据到达的时间,而是在数据产生时记录时间戳,计算服务依据时间戳进行计算。这容易出现一个问题,就是时间戳在前的数据却稍后才到。一般来说这种情况比较少见,所谓可以直接采取丢弃的方式。当然也有不丢弃的处理方式,不过需要一些配置。