流式计算中的Window机制
1. 概述
1.1 流式计算VS批式计算
数据价值:实时性越高,数据价值越高
1.2 批处理
批处理模型典型的数仓架构为T+1架构,即数据计算时天级别的,当天只能看到前一天的计算结果。
通常使用的计算引擎为Hive或者Spark等。计算的时候,数据是完全 ready 的,输入和输出都是确定性的。
1.2.1 小时级批处理
将调度级别下降到小时级,每小时一次调度,理论上可以实现更实时的数仓,但是每次周期处理调度外还有申请、释放等过程,比较消耗资源。
一般线上数仓任务,计算时间从几分钟到几小时不等,分布不均匀,数仓的建模是分层的,三层五层甚至七层都存在,若所有的数据从产生到计算完成都要求在一个小时内,在很多场景下是做不到的。
1.2.2 处理时间窗口
实时计算:处理时间窗口
数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务。
1.2.3 处理时间VS事件时间
处理时间:数据在流式计算系统中真正处理时所在机器的当前时间。
事件时间:数据产生的时间,比如客户端、传感器、后端代码等上报数据时的时间。
1.2.4 事件时间窗口
实时计算:事件时间窗口
数据实时进入到真实事件发生的窗口中进行计算,可以有效的处理数据延迟和乱序。
1.2.5 Watermark
在数据中插入一些 watermark,来表示当前的真实时间。
在数据存在乱序的时候,watermark 就比较重要了,它可以用来在乱序容忍和实时性之间做一个平衡。
2. Watermark
2.1 什么是Watermark
表示系统认为的当前真实的事件时间。
2.2 如何产生Watermark
Watermark产生:一般是从数据的事件时间来产生,产生策略可以灵活多样,最常见的包括使用当前事件时间的时间减去一个固定的delay,来表示可以可以容忍多长时间的乱序。
SQL
CREATE TABLE Orders(
user BIGINT,
product STRING,
order_time TIMESTAMP