这是我参与「第四届青训营 」笔记创作活动的第3天
这节课主要分为4个部分:
- 概述流式计算跟批计算,以及实时数仓和离线数仓的区别;引出流式计算中的window计算定义以及挑战
- 介绍实时计算中的Watermark概念,以及如何产生、传递,还有一些典型的生产实践中遇到的问题
- 介绍三种最基本的window类型,以及他们的实现原理;同时会结合业务场景介绍一些高级优化的功能和原理
- 结合两个真实业务场景的需求,讲解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:滑动窗口
窗口划分:
- 每个key单独划分
- 每条数据可能属于多个窗口
窗口触发:
window结束时间到达的时候一次性触发
3.3:滚动窗口
窗口划分:
- 每个key单独划分
- 每条数据只会属于一个窗口
窗口触发:
Window结束时间到达的时候一次性触发
3..4:会话窗口
窗口划分:
- 每个key单独划分
- 每条数据单独划分为一个窗口,如果Window之间有交集,则会对窗口进行merge
窗口触发:
Window结束时间到达的时候一次性触发