作者:莹TX_937 | 来源:互联网 | 2023-09-09 19:14
1.简介
主要有2种窗口,一个基于时间窗口,一个是基于数据窗口。
时间窗口中起止时间是,左闭右开
2.时间概念
2.1 事件生成时间
指的是数据在设备上产生的时间。
这种模式下,不管数据何时到达或者顺序如何,都能得到一致的结果。
但是,在数据时间乱序的情况下,会产生一些延迟,性能会有影响。
2.2事件接入时间
指的是 数据接入flink的时间。
依赖算子所在主机的系统时钟。
接入时间位于,生成时间和处理时间之间。
事件接入时间模式,不能处理时间乱序和数据延迟问题。但是可以处理flink内部处理数据乱序问题。(该模式无法解决,数据到达flink之前,产生的乱序问题)
2.3事件处理时间
指的是算子在操作过程中,获取的主机时间。
该模式下,实时性最高。但是计算结果不一定准确。
主要用于计算精度不是很高,比如延时比较高的日志数据。
将事件时间和处理时间,进行区分,是flink的一大进步。(比如spark中是没有处理时间的,只有事件事件)
事件时间和处理时间的区别
3.flink设置时间窗口模式
eg:
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironmentobject TimeWindowsTest {def main(args: Array[String]): Unit = {//create envval env = StreamExecutionEnvironment.getExecutionEnvironment//set the Event time windowsenv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)//set the processingTimeenv.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)}}