这是我参与「第四届青训营 」笔记创作活动的第4天
一、本堂课重点内容:
课程主要分为四个部分
第一部分概述了流式计算和批式计算的基本概念
第二部分介绍了Watermark机制
第三部分介绍了Window的基本功能和优化
第四部分通过两个案例分析介绍了Window的相关操作
二、知识点介绍:
-
数据价值
实时性越高,数据价值越大 -
批处理和流处理
批处理典型数仓架构为T+1架构
计算引擎通常为Hive或者Spark流处理通过处理时间窗口,对实时流动的数据进行实时计算,不需要周期调度任务
-
Watermark
时间属性:摄入时间,处理时间,事件时间Watermark定义:当前系统认为的事件时间所在的真实时间。
Watermark产生:一般是从数据的事件时间来产生,产生策略可以灵活多样,最常见的包括使用当前事件时间的时间减去一个固定的delay,来表示可以可以容忍多长时间的乱序。
Watermark传递:类似于Checkpoint的制作过程,传递就类似于Checkpoint的barrier,上下游task之间有数据传输关系的,上游就会将watermark传递给下游;下游收到多个上游传递过来的watermark后,默认会取其中最小值来作为自身的watermark,同时它也会将自己watermark传递给它的下游。经过整个传递过程,最终系统中每一个计算单元就都会实时的知道自身当前的watermark是多少。
-
Watermark的生成策略
Pre-subtask watermark生成
多个partition共用一个WatermarkPre-partition watermark生成
基于每个partition单独的Watermark生成机制 -
迟到数据处理
Window聚合:默认丢弃
双流join:outer join不能join导数据
CEP:默认丢弃1.Allow lateness
2.SideOutput -
Window类型
典型Window:
1.Tumble Window
2.Sliding Window
3.Session Window其他Window:
1.全局Window
2.Count Window
3.累计窗口
4. ... -
Window 高级优化
1.Mini-batch 优化
2.Local-global
3.Distinct计算状态复用
4.Pane优化
三、课后拓展:
-
Flink窗口的必须操作:
使用窗口分配器(WindowAssigner)将数据流中的元素分配到对应的窗口。
当满足窗口触发条件后,对窗口内的数据使用窗口处理函数(Window Function)进行处理,常用的Window Function有reduce、aggregate、process。 -
滚动窗口
1.基于时间驱动
场景: 需要统计每一分钟中用户购买的商品的总数, 需要将用户的行为事件按每一分钟进行切分。2.基于事件驱动
场景: 当想要每100个用户的购买行为作为驱动, 那么每当窗口中填满100个 “相同” 元素了, 就会对窗口进行计算。 -
滑动窗口
1.基于时间的滑动窗口
场景:每30秒计算一次最近一分钟用户购买的商品总数。2.基于事件的滑动窗口
场景:每10个“相同”元素计算一次最近100个元素的总和。 -
会话窗口
计算每个用户在活跃期间总共购买的商品数量, 如果用户30秒没有活动则视为会话断开。
四、引用参考:
- Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例
- Flink的窗口和时间