流式计算中的 Window 计算 | 青训营笔记

114 阅读3分钟

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

一、本堂课重点内容:

课程主要分为四个部分
第一部分概述了流式计算和批式计算的基本概念
第二部分介绍了Watermark机制
第三部分介绍了Window的基本功能和优化
第四部分通过两个案例分析介绍了Window的相关操作

二、知识点介绍:

  • 数据价值
    实时性越高,数据价值越大

  • 批处理和流处理
    批处理典型数仓架构为T+1架构
    计算引擎通常为Hive或者Spark

    流处理通过处理时间窗口,对实时流动的数据进行实时计算,不需要周期调度任务

image.png

  • Watermark
    时间属性:摄入时间,处理时间,事件时间

    Watermark定义:当前系统认为的事件时间所在的真实时间。

    Watermark产生:一般是从数据的事件时间来产生,产生策略可以灵活多样,最常见的包括使用当前事件时间的时间减去一个固定的delay,来表示可以可以容忍多长时间的乱序。

    Watermark传递:类似于Checkpoint的制作过程,传递就类似于Checkpoint的barrier,上下游task之间有数据传输关系的,上游就会将watermark传递给下游;下游收到多个上游传递过来的watermark后,默认会取其中最小值来作为自身的watermark,同时它也会将自己watermark传递给它的下游。经过整个传递过程,最终系统中每一个计算单元就都会实时的知道自身当前的watermark是多少。

  • Watermark的生成策略
    Pre-subtask watermark生成
    多个partition共用一个Watermark

    Pre-partition watermark生成
    基于每个partition单独的Watermark生成机制

  • 迟到数据处理
    Window聚合:默认丢弃
    双流join:outer join不能join导数据
    CEP:默认丢弃

    1.Allow lateness
    2.SideOutput

  • Window类型
    典型Window:
    1.Tumble Window
    2.Sliding Window
    3.Session Window

    其他Window:
    1.全局Window
    2.Count Window
    3.累计窗口
    4. ...

  • Window 高级优化
    1.Mini-batch 优化
    2.Local-global
    3.Distinct计算状态复用
    4.Pane优化

三、课后拓展:

  • Flink窗口的必须操作:

    使用窗口分配器(WindowAssigner)将数据流中的元素分配到对应的窗口。
    当满足窗口触发条件后,对窗口内的数据使用窗口处理函数(Window Function)进行处理,常用的Window Function有reduce、aggregate、process。

  • 滚动窗口
    1.基于时间驱动
    场景: 需要统计每一分钟中用户购买的商品的总数, 需要将用户的行为事件按每一分钟进行切分。

    2.基于事件驱动
    场景: 当想要每100个用户的购买行为作为驱动, 那么每当窗口中填满100个 “相同” 元素了, 就会对窗口进行计算。

  • 滑动窗口
    1.基于时间的滑动窗口
    场景:每30秒计算一次最近一分钟用户购买的商品总数。

    2.基于事件的滑动窗口
    场景:每10个“相同”元素计算一次最近100个元素的总和。

  • 会话窗口
    计算每个用户在活跃期间总共购买的商品数量, 如果用户30秒没有活动则视为会话断开。

四、引用参考:

  • Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例

juejin.cn/post/684490…

  • Flink的窗口和时间

juejin.cn/post/706274…