流式计算中的 Window 计算 | 青训营笔记

128 阅读2分钟

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

流式计算中的 Window 计算

流式计算跟批计算的区别: 流式计算,顾名思义,就是对数据流进行处理,是实时计算。 批量计算则统一收集数据,存储到数据库中,然后对数据进行批量处理的数据计算方式。 区别如下: 1、数据时效性不同:流式计算实时、低延迟, 批量计算非实时、高延迟。

2、数据特征不同:流式计算的数据一般是动态的、没有边界的,而批处理的数据一般则是静态数据。

3、应用场景不同:流式计算应用在实时场景,时效性要求比较高的场景,批量计算一般说批处理,应用在实时性要求不高、离线计算的场景下,数据分析、离线报表等。

4、运行方式不同,流式计算的任务持续进行的,批量计算的任务则一次性完成。

实时数仓和离线数仓的区别: 从架构上,区别较明显,实时数仓以Kappa架构为主,而离线数仓以传统大数据架构为主。Lambda架构可以认为是两者的中间态。 从建设方法上,实时数仓和离线数仓基本还是沿用传统的数仓主题建模理论,产出事实宽表。 最后,实时数仓因为要保证实时性,所以对数据量的变化较为敏感。而离线数仓对此不是很敏感。

实时计算中的Watermark: Watermark定义:当前系统认为的事件时间所在的真实时间。

Watermark产生:一般是从数据的事件时间来产生,产生策略可以灵活多样,最常见的包括使用当前事件时间的时间减去一个固定的delay,来表示可以可以容忍多长时间的乱序。

Watermark传递:这个类似于上节课中介绍的Checkpoint的制作过程,传递就类似于Checkpoint的barrier,上下游task之间有数据传输关系的,上游就会将watermark传递给下游;下游收到多个上游传递过来的watermark后,默认会取其中最小值来作为自身的watermark,同时它也会将自己watermark传递给它的下游。经过整个传递过程,最终系统中每一个计算单元就都会实时的知道自身当前的watermark是多少。