一、时间分类
-
事件时间(event time): 事件产生的时间,记录的是设备生产(或者存储)事件的时间
-
摄取时间(ingestion time): Flink 读取事件时记录的时间
- 处理时间(processing time): Flink pipeline 中具体算子处理事件的时间
二、 watermarks
1 、作用:
定义合适停止等待较早的事件,可以在控制延迟和完整性之间权衡。
2,延迟:
延迟是相对于 watermarks 定义的。Watermark(t)
表示事件流的时间已经到达了 t; watermark 之后的时间戳 ≤ t 的任何事件都被称之为延迟事件。
三、 windows
1)窗口分配器
- 滚动时间窗口
- 每分钟页面浏览量
TumblingEventTimeWindows.of(Time.minutes(1))
- 滑动时间窗口
- 每10秒钟计算前1分钟的页面浏览量
SlidingEventTimeWindows.of(Time.minutes(1), Time.seconds(10))
- 会话窗口
- 每个会话的网页浏览量,其中会话之间的间隔至少为30分钟
EventTimeSessionWindows.withGap(Time.minutes(30))
注意:
如果使用窗口分配器,处理 处理时间的。有以下限制要注意:
- 无法正确处理历史数据,
- 无法正确处理超过最大无序边界的数据,
- 结果将是不确定的,
2)窗口应用函数
- 像批量处理,
ProcessWindowFunction
会缓存Iterable
和窗口内容,供接下来全量计算; - 或者像流处理,每一次有事件被分配到窗口时,都会调用
ReduceFunction
或者AggregateFunction
来增量计算; - 或者结合两者,通过
ReduceFunction
或者AggregateFunction
预聚合的增量计算结果在触发窗口时, 提供给ProcessWindowFunction
做全量计算。
3)使用窗口的一些注意点
A 滑动窗口通过复制来实现的
B 时间窗口和时间平齐,即 12:05 开始的一个小时的窗口,结束时间是 13:00.
C window 接 window
D 空的时间窗口不会输出结果