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

83 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第5天今天学习了流式计算中的Window机制。

流式计算中的Window机制

前置知识

  • 流式计算的动态表
  • Flink中的State和Checkpoint的基本原理
  • Flink中的Retract机制,算子如何产生和处理Retract数据
  • 在Flink中如何实现Exactly-Once的语义

概述

数据价值:实时性越高,数据价值越高

批计算特征:

  • T+1架构
  • 计算引擎为Hive或者Spark
  • 小时级的批计算
  • 处理时间的窗口(实时计算)

小结

  • 批式计算T+1数仓架构
  • 数据实时性越高,价值越高
  • 实时计算有处理时间和事件时间
  • 事件时间需要Watermark配合处理乱序

Watermark

Watermark: 表示系统认为的当前真实的事件时间

注意:上面的触发公式进行如下变形:

1、Watermaker >= 窗口的结束时间

2、Watermaker = 当前窗口的最大的事件时间 - 最大允许的延迟时间或乱序时间

3、当前窗口的最大的事件时间 - 最大允许的延迟时间或乱序时间 >= 窗口的结束时间

4、当前窗口的最大的事件时间 >= 窗口的结束时间 + 最大允许的延迟时间或乱序时间

小结

  • 含义:标识系统认为的当时的真实事件
  • 生成:可以通过Watermark Generator 来生成
  • 传递:去上游所有subtask的最小值
  • 部分数据断流 Idle SOurce
  • 迟到的数据处理 Window算子是丢弃,Join算子认为跟之前的数据无法join

Window

  • 滚动窗口
  • 滑动窗口
  • 会话窗口

Window使用

滚动窗口

窗口划分:

  1. 按key单独划分
  2. 每条数据只会属于一个窗口

窗口触发: Window结束时间到达的时候会一次性触发

滑动窗口

窗口划分:

  1. 按key单独划分
  2. 每条数据只会属于多个窗口

窗口触发: Window结束时间到达的时候会一次性触发

会话窗口

窗口划分:

  1. 按key单独划分
  2. 每条数据单独划分一个窗口,如果window之间有交集,则对窗口进行merge

窗口触发: Window结束时间到达的时候会一次性触发

迟到数据处理

只有事件时间下才有吃到数据 而吃到数据默认丢弃

小结

  • 三种窗口定义
  • 迟到数据的处理
  • 增量计算和全量计算
  • Emit触发提前输出窗口结果