这是我参与「第四届青训营 」笔记创作活动的第1天
概述
1.1 流式计算 VS 批计算
1.2 批处理
批处理模型典型的数仓架构为T+1架构
即数据计算是天级别的,当天只能看到前一天的计算结果
通常使用的计算引擎为Hive或者Spark等。计算的时候,数据是完全ready的,输入和输出都是确定性的。
1.3 处理时间窗口
实时计算:处理时间窗口 数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务。、
1.4 处理时间 VS 事件时间
- 处理时间:数据在流式计算系统中真正处理所在机器的当前时间
- 事件时间:数据产生的时间,比如及客户端、传感器】后端代码等上报数据时的时间
1.5 事件窗口
数据进入到真实事件发生的窗口中进行计算,可以有效的处理数据延迟和乱序。
1.6 Watermark
- 在数据中插入一些watermark, 来表示当前的真实时间
- 在数据乱序时候,waterMark就比较重要了,它可以用来在乱序容忍和实时性之间做一个平衡。
Watermark
2.1 定义
表示系统认为的当前的真实的事件的时间
2.2 产生的方法
- SQL
CREATE TABLE Orders (
user BIGINT,
product STRING,
order_time TIMESTAMP(3),
WATERMARK FOR order time AS order time INTERVAL '5' SECOND
) WITH (...)
- DataStream
Watermarkstrategy
.<Tuple2<Long,String>>forBoundedOutoforderness(Duration.ofSeconds(20))
.withTimestampAssigner((event,timestamp)->event.f0);
2.3 如何传递WaterMark
- 一对一:下游接受上游的waterwark
- 一对多:下游选择上游传递的最小的watermark
Windows应用
3.1 滚动窗口
- 窗口划分:
- 每个key单独划分
- 每条数据只会属于一个窗口
- 窗口触发 Windows结束时间到达的时候一次性触发
3.2 滑动窗口
- 窗口划分:
- 每个key单独划分
- 每条数据可能属于多个窗口
- 窗口触发 Windows结束时间到达的时候一次性触发
3.3 会话窗口
- 窗口划分:
- 每个key单独划分
- 每条数据会单独划分为一个窗口,如果window之间有交集则会对窗口进行merge
- 窗口触发 Windows结束时间到达的时候一次性触发
迟到数据处理
- Allow lateness: 这种方式需要设置一个允许迟到的时间。设置之后,窗口正常计算结 束后,不会马上清理状态,而是会多保留allowLateness这么长时间 在这段时间内如果还有数据到来,则继续之前的状态进行计算。
- SideOutput: 这种方式需要对迟到数据打一个tag,然后在DataStream上根据这 个tg获取到迟到数据流,然后业务层面自行选择进行处理。
总结
本次学习了关于流计算中的Windows计算,总的来说对于流计算有了一个概念的理解,对于今后的学习打下了基础。