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

135 阅读2分钟

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

一、课程内容

1. 概述

流式计算与批计算相比的区别

2. Watermark

含义、生成方法和传递机制

3. Window的高级性能

Window的基本性能和优化

4. 案例分析

抖音DAU曲线以及大数据资源使用统计分析

二、概述

  • 数据实时性越高,数据价值越高
  • 批处理
    • 架构为T+1,只能处理前一天的数据,使用Hive或者Spark时,数据基本是准备好的。
  • 处理时间窗口
    • 处理时间窗口
  • 处理时间与事件时间
    • 处理时间:数据在流式系统计算时所处机器的时间
    • 事件时间:数据产生的时间,如传感器、客户端或者后端代码上传的时间
  • 事件时间窗口
    • 如果一个事件发生了,但是还没有处理到数据怎么办,什么时候时间窗口结束?
    • 利用watermark在乱序容忍和实时性之间平衡

二、Watermark

1. 含义

系统认为的当前真实的事件时间

2. 如何产生watermark

简单应用:从原始字段中减去固定的时长作为watermark的数值

3. 如何传递watermark

每个算子根据上游输入的subtask的最小值(watermark)决定当前的数值,并传递到下一个算子

4. 如何用Flink UI观察watermark

可以查看并行度,或者展开算子看。

三、Window

1. 基本功能

  • 窗口类别
    • 滚动窗口
    • 滑动窗口
    • 会话窗口
  • 迟到数据处理
    • 定义:window end 比当前watermark还小
    • Allow lateness: DataStream, SQL
    • Side Output(侧输出流):DataStream
  • 增量 VS 全量计算
    • 增量计算
      • window只存储计算结果,如reduce,aggregate,SQL的聚合只有增量计算
    • 全量计算
      • 每条数据到来,都会存储到window的state中,等到window触发计算,所有数据一起计算
      • process函数全量计算
  • EMIT触发
    • EMIT输出:在window没有结束的时候,提前把window计算的部分结果输出出来。
    • Trigger自定义实现:continue,fire,purge,fire_and_purge

2. 高级优化

  • Mini-batch
  • 倾斜优化 local global
  • distinct计算状态复用
  • Pane优化

四、使用案例

1. Flink SQL计算抖音日活曲线

2. Flink SQL计算大数据任务的资源使用