这是我参与「第四届青训营 」笔记创作活动的的第3天。
1 流式计算和批式计算的比较
如下图所示
2 批处理
批处理模型典型的数仓架构为T+1架构,即数据计算时天级别的,当天只能看到前一天的计算结果。 通常使用的计算引擎为Hive或者Spark等。计算的时候,数据是完全 ready 的,输入和输出都是确定性的。
2.1 小时级批处理
将调度级别下降到小时级,每小时一次调度,理论上可以实现更实时的数仓,但是每次周期处理调度外还有申请、释放等过程,比较消耗资源。 一般线上数仓任务,计算时间从几分钟到几小时不等,分布不均匀,数仓的建模是分层的,三层五层甚至七层都存在,若所有的数据从产生到计算完成都要求在一个小时内,在很多场景下是做不到的。
2.2 处理时间窗口
实时计算:处理时间窗口 数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务。
2.3 处理时间VS事件时间
处理时间:数据在流式计算系统中真正处理时所在机器的当前时间。 事件时间:数据产生的时间,比如客户端、传感器、后端代码等上报数据时的时间。
2.4 事件时间窗口
实时计算:事件时间窗口 数据实时进入到真实事件发生的窗口中进行计算,可以有效的处理数据延迟和乱序。
2.5 Watermark
在数据中插入一些 watermark,来表示当前的真实时间。 在数据存在乱序的时候,watermark 就比较重要了,它可以用来在乱序容忍和实时性之间做一个平衡。
3 Window分类
3.1滚动窗口
窗口划分:
每个 key 单独划分
每条数据只会属于一个窗口
窗口触发:
Window 结束时间到达的时候一次性触发
3.2滑动窗口
窗口划分:
每个 key 单独划分
每条数据可能会属于多个窗口
窗口触发:
Window 结束时间到达的时候一次性触发
3.3会话窗口
窗口划分:
每个key单独划分
每条数据会单独划分为一个窗口,如果window之间有交集,则会对窗口进行merge
窗口触发:
Window结束时间到达的时候一次性触发