这篇文章主要介绍Flink的窗口、时间和水印。
在之前的文章中反复提到过窗口和时间的概念,Flink框架中支持事件时间、摄入时间和处理时间三种。当我们在流式计算环境中数据从Source产生,再到转换和输出,这个过程由于网络和反压的原因会导致消息乱序,因此,需要一个机制来解决这个问题,这个特别的机制就是“水印”。
Flink的窗口和时间
根据窗口数据划分的不同,Flink目前支持如下3中:
- 滚动窗口,窗口数据有固定的大小,窗口中的数据不会叠加;
- 滑动窗口,窗口数据有固定的大小,并且有生成间隔;
- 会话窗口,窗口数据没有固定的大小,根据用户传入的参数进行划分,窗口数据无叠加。
Flink 中的时间分为三种:
- 事件时间(Event Time),即事件实际发生的时间
- 摄入时间(Ingestion Time),事件进入流处理框架的事件
- 处理时间(Processing Time),事件被处理的事件
如下面,详细说了这三种时间的区别和联系: