时间(Time)语义
Event Time :事件创建的时间
lngestion Time :数据进入Flink的时间
Processing Time : 执行操作算子的本地系统时间,与机器相关
设置时间语义
首先设置全局时间语义
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
其次指定当前数据里的时间戳是哪个字段
.assignAscendingTimestamps() 括号里要求的字段是毫秒级别时间戳
val dataStream = inputDataStream.map(data => {
val dataArray = data.split(",")
SensorReading(dataArray(0), dataArray(1).toLong, dataArray(2).toDouble)
})
.assignAscendingTimestamps(_.timestamp *1000L)
当flink 以event time 模式处理数据流时,它会根据数据里的时间戳来处理基于时间的算子
由于网络,分布式等原因会导致乱序数据的产生
涉及到 延迟数据 来的晚 如果窗口已经关闭了 就无法处理了
解决方案 watermark
waterMark(水位线