流式计算中的 Window 计算|字节跳动青训营

89 阅读3分钟

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


这节课主要分为4个部分:

  1. 概述流式计算跟批计算,以及实时数仓和离线数仓的区别;引出流式计算中的window计算定义以及挑战
  2. 介绍实时计算中的Watermark概念,以及如何产生、传递,还有一些典型的生产实践中遇到的问题
  3. 介绍三种最基本的window类型,以及他们的实现原理;同时会结合业务场景介绍一些高级优化的功能和原理
  4. 结合两个真实业务场景的需求,讲解window是如何解决实际生产问题的

课程回顾:

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

学习本课程的收获:

  • 了解实时计算和批示计算的本质区别,以及实时计算的新机遇和挑战
  • 了解实时计算中的核心功能:Watermark机制、Window机制
  • 了解3大窗口类型的定义、使用及核心功能

\

一:概述

\

1.1:流式计算和批式计算的比较

\

1.2:批处理:

批处理模型典型的数创架构为T+1架构,即数据计算时长是天级别的,当天只能看到前一天的结果。通常你使用的计算引擎为Hive或者Spark,计算时数据是完全ready的,输入和输出都是确定性的

1.3:处理时间窗口

实时计算:处理时间窗口

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

1.4:处理时间VS时间时间

处理时间:数据在流式计算系统真正处理时所在机器的当前时间

时间时间:数据产生的时间,比如客户端、传感器、后端代码上报数据的时间

\

1.5:事件的时间窗口

实时计算: 时间时间窗口

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

1.6:Watermark

小结:

  • 批式计算一般是T+1的数仓架构
  • 数据实时性越高,数据价值越高
  • 实时计算分为处理事件和事件事件
  • 事件事件需要Watermark配合来处理乱序

二:Watermark

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

2.1:如何产生Watermark?

2.2:小结

  • 含义:表示系统认为的当前时间
  • 生成:可以通过Watermark Generator来生成
  • 传递:取上游所有subtask的最小值
  • 部分数据断流:ldle Source
  • 迟到数据处理:Window算子是丢失;Join算子认为跟之前的数据无法join到

三:Window

3.1:基本功能

Window分类:W

3.2:滑动窗口

窗口划分:

  1. 每个key单独划分
  2. 每条数据可能属于多个窗口

窗口触发:

window结束时间到达的时候一次性触发

3.3:滚动窗口

窗口划分:

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

窗口触发:

Window结束时间到达的时候一次性触发

3..4:会话窗口

窗口划分:

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

窗口触发:

Window结束时间到达的时候一次性触发