Flink学习篇2

2020-07-01 00:00:00 数据 时间 窗口 日志 滑动

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)))

相关文章