这是我参与「第四届青训营 」笔记创作活动的的第4天
流式计算中的Window机制
流式运算与批示运算的对比
批处理:批处理模型典型的数仓架构为T+1架构,即数据计算时天级别的,当天只能看到前一天的计算结果。通常使用的计算引擎为Hive或者Spark等,计算的时候,数据是完全ready的,输入和输出都是确定性的。
处理时间:数据在流式计算系统中真正处理时所在机器的当前时间。 事件事件:数据产生的时间,比如客户端、传感器、后端代码等上报数据时的时间。 实时计算:事件时间窗口。 数据实时进入到真实事件发生的窗口中进行计算,可以有效的处理数据延迟和乱序
迟到数据处理
因为watermark表示当前事件发生的真实时间,那晚于watermark的数据到来时,系统会认为这种数据是迟到的数据。 算子自身来决定如何处理迟到数据:1、Window聚合,默认会丢弃迟到数据2、双流join,如果是outer join,则可以认为它不能join到任何数据3、CEP,默认丢弃
Window分类
1、滚动窗口:每个key单独划分;每条数据只会属于一个窗口 2、滑动窗口:每个key单独划分;每条数据可能会属于多个窗口 3、会话窗口:每个key单独划分;每条数据会单独划分为一个窗口,如果window之间有交集,则会对窗口进行merge
迟到数据处理
1、Allow lateness:这种方式需要设置一个允许迟到的时间。设置之后,窗口正常计算结束后,不会马上清理状态,而是会多保留allowlateness这么长时间,在这段时间内如果还有数据到来,则继续之前状态进行计算 2、SideOutput:这种方式需要对迟到数据打一个tag,然后在DataStream上根据这个tag获取到迟到数据流,然后业务层面自行选择进行处理。