这是我参与「第四届青训营 」笔记创作活动的第2天。
第四节课「流计算中的 Window 计算」的内容主要包含 4 个方面:概述、Watermark、Window、案例分析。这篇文章为概述和 Watermark 的相关内容。
概述
流式计算 VS 批式计算
数据价值:实时性越高,数据价值越大
| 特性 | 流式计算 | 批式计算 |
|---|---|---|
| 数据存储 | Kafka、Pulsar | HDFS、Hive |
| 数据时效性 | 分钟级别 | 天级别 |
| 准确性 | 精准和时效性之间取舍 | 精准 |
| 典型计算引擎 | Flink | Hive、Spark、Flink |
| 计算模型 | At Least Once | Exactly Once |
| 资源模型 | 长期持有 | 定时调度 |
| 主要场景 | 实时数仓、实时营销、实时风控 | 离线天级别数据报表 |
批处理
- 批处理模型典型的数仓架构为T+1架构,即数据计算时天级别的,当天只能看到前一天的计算结果。
- 通常使用的计算引擎为Hive或者Spark等。计算的时候,数据是完全ready的,输入和输出都是确定性的。
实时计算
- 数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务
处理时间 VS 事件时间
- 处理时间:数据在流式计算系统中真正处理时所在机器的当前时间
- 事件时间:数据产生的时间,比如客户端、传感器、后端代码等上报数据时的时间
Watermark
定义
当前系统认为的事件时间所在的真实时间。
产生
一般是从数据的事件时间来产生,产生策略可以灵活多样,最常见的包括使用当前事件时间的时间减去一个固定的delay,来表示可以可以容忍多长时间的乱序。
传递
类似于Checkpoint的制作过程,传递就类似于Checkpoint的barrier,上下游task之间有数据传输关系的,上游就会将watermark传递给下游;下游收到多个上游传递过来的watermark后,默认会取其中最小值来作为自身的watermark,同时它也会将自己watermark传递给它的下游。经过整个传递过程,最终系统中每一个计算单元就都会实时的知道自身当前的watermark是多少。
个人总结
对流式计算、批式计算有了更多了解,学习了处理时间、事件时间和 Watermark 等概念。