流计算中的Windows计算 | 青训营笔记

99 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

概述

1.1 流式计算 VS 批计算

image.png

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计算,总的来说对于流计算有了一个概念的理解,对于今后的学习打下了基础。