Flink学习篇2
Flink的时间概念
Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。
Ingestion Time:是数据进入Flink的时间。
Processing Time:是每一个执行基于时间操作的算子的本地系统时间,与机器相关,默认的时间属性就是Processing Time。
究竟哪个时间对我们才是意义要研究的呢。
例子
一条日志进入Flink的时间为2020-05-01 10:00:00.123,到达Window的系统时间为2020-05-01 10:00:01.234,日志的内容如下:
2020-05-01 18:37:15.624 INFO Fail over to rm2
对于业务来说,要统计1min内的故障日志个数,哪个时间是有意义的?
—— eventTime,因为我们要根据日志的生成时间进行统计。
窗口概念
滚动窗口
特点:时间对齐,窗口长度固定,没有重叠。
适用场景:适合做BI统计等(做每个时间段的聚合计算)
scala代码 求15s的滚动窗口
val minTempPerWindow = dataStream
.map(r => (r.id, r.temperature))
.keyBy(_._1)
.timeWindow(Time.seconds(15))
.reduce((r1, r2) => (r1._1, r1._2.min(r2._2)))
相关文章