Flink从入门到真香(13、时间语义的定义)

在watermark之前先说下时间的概念,在https://blog.51cto.com/mapengfei/2554577 里面有各种时间窗口,实际生产中那是以哪个时间为准产生的窗口呢? 事件发生的时间? 进入flink程序的时间?还是flink开始处理的时间
Flink提供了一套设计解决方案
设置可以在代码中env直接设置

    val env = StreamExecutionEnvironment.getExecutionEnvironment

//    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)  //以事件时间作为窗口聚合
//env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime)   //以数据进入flink的时间作为窗口时间
//    env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime) //以Flink实际处理时间作为窗口时间

时间语义

Flink从入门到真香(13、时间语义的定义)

只能说不同的场景下,每个时间都有使用场景,具体根据实际情况来实施

在代码中设置

我们可以直接在代码中,对执行环境调用setStreamCharacteristic方法,设置流的时间特性
具体的时间,还需要从数据中提取时间戳(timestamp),
如果要用事件时间,还需要设置具体取的哪个字段和格式,否则flink也不知道你用的哪个字段

val env = StreamExecutionEnvironment.getExecutionEnvironment
//从调用时刻开始给env创建的每个stream追加时间特性
env.setStreamTimeCharcteristic(TimeCharacteristic.EventTime)

猜你喜欢

转载自blog.51cto.com/mapengfei/2554583