Flink WINDOW和TIME
Window 类型分类
- CountWindow
- TimeWindow
- TumblingWindow
- SlidingWindow
- SessionWindow
Time Window 类型分类
- EventTime
- IngestTime
- ProcessingTime
Window 详细介绍
1、window api 定义
datastream.keyBy(...).window(...).reduce()/apply()......
2、Window 类型图解
TumblingWindow 详细介绍
1、定义:将数据依据固定窗口长度对数据进行切割。
2、列子:
.timeWindow(Time.seconds(30)) // 每30秒计算一个时间窗口
.countWindow(100) // 统计每100个元素做计算
3、特点:时间对齐、窗口长度固定
4、适合场景:适合做BI统计等(做每个时间段的聚合计算)
SlidingWindow 详细介绍
1、定义: 窗口和窗口之间是重叠的,由滑动窗口航渡和滑动间隔组成
2、例子:
.countWindow(1000,10) //每10个元素,对过去1000元素计算
.timeWindow(Time.seconds(1000),Time.seconds(10)) //没每10秒,对过去1000秒的元素做计算
3、特点:窗口长度固定,有重叠
4、适合场景:可以做一些报警统计等。
SessionWindow 详细介绍
1、定义:理解类似于 WEB 的应用的session,一段时间内没有接收到数据就会生成新的窗口
2、例子
.window(SessionWindows.withGap(Time.minutes(10)))
3、特点:时间不对齐
4、适合场景:对线上用户的行为分析等
Time Window 详细介绍
1、首先先理解三种时间
1. EventTime 事件时间、日志时间
2. IngestTime 进入 Flink 的时间(进入datasource的时间)
3. ProcessingTime Flink 处理的时间
2、官方图解
3、 一些重要概念的理解
1. watermarket 水位线,决定着窗口是否触发,小于水位线的数据默认会丢弃
2. 对延迟数据的处理
1. 默认是丢弃
2. 可以通过设置延迟窗口触发,例如本来18:00触发的窗口 ,可以通过代码让其延迟两分钟计算(18:02)。
3. 延迟的数据可以通过sideOutputTag 落入hdfs或者hbase等。
4. watermarkt 分为两类基于Timer的,定时发送,核puncuated watermarks 基于某些事件触发watermark的生成和发送