Event Time:事件创建的时间
Ingestion Time:数据进入Flink的时间
Processing Time:执行操作算子的本地系统时间,与机器相关
Flink中默认的时间语义是Processing Time;
如果使用EventTime语义,但是数据中不一定会有Event Time,如果没有可以使用Ingestion Time。
如果使用EventTime,数据中也有相应的字段,那么flink知道具体是哪个字段表示timestamp吗?所以代码中需要指定。
dataStream.assignTimestampsAndWatermarks();
在Flink的流式处理中,绝大部分的业务都会使用eventTime,一般只在eventTime无法使用时,才会被迫使用ProcessingTime或者IngestionTime。
如果要使用EventTime,那么需要引入EventTime的时间属性,引入方式如下所示:
val env = StreamExecutionEnvironment.getExecutionEnvironment // 从调用时刻开始给env创建的每一个stream追加时间特征 env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
Watermark的概念和原理:
乱序数据的影响