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

110 阅读2分钟

这是我参与【第四届青训营】笔记创作活动的第3天

一、本堂课重点内容

1.了解实时计算和批式计算的本质区别

2.了解实时计算中的核心功能:Watermark机制、Window机制

3.了解三大基本窗口类型的定义、使用以及核心原理

4.了解窗口机制中的最核心的优化及其原理

二、知识点详细介绍

2.1 流式计算与批式计算对比

image.png

2.2 处理时间窗口与事件时间窗口

1)处理时间窗口

数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务

2) 事件时间窗口

数据实时进入到真实事件发生的窗口中进行计算,可以有效的处理数据延迟和乱序

3)处理时间与事件时间对比

image.png

2.3 Watermark

1)定义:表示系统认为的当前真实的事件时间

2)产生代码(SQL)

`:CREATE TABLE Orders(
        user BIGINT,
        product STRING,
        order_time TIMESTAMP(3),
        WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND
   )WITH(...);
        `

2.4 Window-基本功能

1)典型的Window:Tumble Window(滚动窗口)、Sliding Window(滑动窗口)、Session Window(会话窗口)

2)窗口对比:

image.png

2.5 迟到数据

1)产生条件:在事件时间下才会有迟到的数据

2)处理方式:丢弃

2.6 增量计算:

每条数据到来直接进行计算,window只存储计算结果,eg:计算sum,状态中只需要存储sum的结果,不需要保存每条数据。

2.7 全量计算:

每条数据到来,会存储到window的state中,等window触发计算时候将所有数据拿出来一起计算

三、实践练习例子

1)计算抖音的日活曲线

`  SELECT
      SUM(partial_cnt) as dau
      TUMBLE_START(event_time,INTERVAL '1' DAY) as wstart,
      LOCALTIMESTAMP as current_ts
   FROM (
      SELECT
          COUNT(DISTINCT uid) as partial_cnt,
          TUMBLE_ROWTIME(event_time,INTERVAL '1' DAY) as event_time
      FROM user_activity
      GROUP BY
          TUMBLE(event_time, INTERVAL, '1' DAY),
          MOD(uid,10000)
    )
    GROUP BY TUMBLE(event_time,INTERVAL '1' DAY)`

2)计算大数据任务的资源使用

` SELECT
    application_id
    SUM(cpu_usage) as cpu_total
    SUM(memory_usage) as memory_total,
  FROM resource_usage
  GROUP BY
      application_id,
      SESSION(event_time,INTERVAL '10' MINUTE)`

四、课后个人总结

本章节学习中window的高级优化和会话窗口知识点较为不易掌握,需要较为用功学习,而会话窗口作为比较特殊的策略,它基于时间间隔来划分窗口,因而在学习中需要注重判断基于时间,其中,上述讲述中的window中各个窗口对比具有一定的混淆性,需要注重区别和掌握。