Flink-时间语义和Watermark

  

 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的概念和原理:

乱序数据的影响

原文地址:https://www.cnblogs.com/Rabcheng/p/14165776.html