上文介绍了关于时间戳,时间,与水印的性质,接下来是关于如何在程序之中使用它们的用例。
ps:关于本文以及以后所用到的maven依赖与打包插件请参考
https://blog.csdn.net/hxw79321/article/details/86612814 就不在文章之中继续赘述。
首先要设置流环境的时间窗口类型(scala实现)
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
定义完事件时间类型后就要开始处理事件时间中的数据,我们现在还不能直接对该类型的数据进行操作,上文说过,处理事件时间必须要为其分配时间戳和水印。
一、分配时间戳与水印的两种方法
1、直接在数据之中指定
2、实现时间戳和水印生成器
ps:时间戳和水印是从1970-01-01T00:00:00至今的毫秒数。
要在源就赋予数据水印必须调用SourceContext 的 collectWithTimestamp方法,生成水印需要使用emitWatermark
(Watermark)函数
实现水印生成器首先要实现AssignerWithPeriodicWatermarks 代码:
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.functions.AssignerWithPeriodicWatermarks
import org.apache.flink.streaming.api.scala.{DataS