flink中Time和window

一、Time

flink中Time和window

 

 

 

 

 

 

 

 

(1)Even time

  1、Event Time 是事件发生的时间,一般就是数据本身携带的时间。这个时间通常是在事件到达 Flink 之前就确定的,并且可以从每个事件中获取到事件时间戳。

  2、在 Event Time 中,时间取决于数据,而跟其他没什么关系。如果事件按照事件先后发生的顺序到达,那么处理 Event Time 将产生完全一致和确定的结果;否则处理 Event Time 时将会因为要等待一些无序事件而产生一些延迟。由于只能等待一段有限的时间,因此就难以保证处理 Event Time 将产生完全一致和确定的结果。

  3、Event Time 程序必须指定如何生成 Event Time 水印,这是表示 Event Time 进度的机制

(2)Ingestion Time

  1、Ingestion Time 是事件进入 Flink 的时间,在概念上位于 Event Time 和 Processing Time 之间。

  2、与 Event Time 相比,Ingestion Time 程序无法处理任何无序事件或延迟数据,但程序不必指定如何生成watermark。

  3、Ingestion Time 与 Event Time 非常相似,但 Ingestion Time 具有自动分配时间戳和自动生成watermark功能。

(3)procession time:Processing Time 是指事件被处理时机器的系统时间。

二、window

(1)window类型

  1、TimeWindow:按照时间生成Window

  2、CountWindow:按照指定的数据条数生成一个Window,与时间无关。

(2)time window的类型

  1、Tumbling Time Window(滚动窗口):假设统计每一分钟中用户购买的商品的总数,需要将用户的行为事件按每一分钟进行切分,这种切分被成为翻滚时间窗口,翻滚窗口能将数据流切分成不重叠的窗口,每一个事件只能属于一个窗口。特点:将数据依据固定的窗口长度对数据进行切片;时间对齐,窗口长度固定,没有重叠。

  val tumblingCnts= buyCnts.keyBy(0).timeWindow(Time.minutes(1)).sum(1)

flink中Time和window

  2、sliding time window(滑动窗口):对于某些应用,它们需要的窗口是不间断的,需要平滑地进行窗口聚合。比如,我们可以每30秒计算一次最近一分钟用户购买的商品总数。这种窗口我们称为滑动时间窗口(Sliding Time Window)。在滑窗中,一个元素可以对应多个窗口。特点:滑动窗口由固定的窗口长度和滑动间隔组成;时间对齐,窗口长度固定,有重叠。

   1)滑动窗口和滚动窗口的函数名是完全一致的,只是在传参数时需要传入两个参数,一个是window_size,一个是sliding_size。

    val slidingCnts = buyCnts.keyBy(0).timeWindow(Time.minutes(1), Time.seconds(30)).sum(1)

flink中Time和window

  3、Session Windows(会话窗口):session窗口跟滚动窗口和滑动窗口相比,不会有重叠和固定的开始时间和结束时间的情况,相反,当它在一个固定的时间周期内不再收到元素,即非活动间隔产生,那个这个窗口就会关闭。特点:时间无对齐。由一系列事件组合一个指定时间长度的timeout间隙组成,类似于web应用的session,也就是一段时间没有接收到新数据就会生成新的窗口。

  val sessionCnts: DataStream[(Int, Int)] = vehicleCnts.keyBy(0).window(ProcessingTimeSessionWindows.withGap(Time.seconds(30))).sum(1)

flink中Time和window

(3)CountWindow类型

  CountWindow根据窗口中相同key元素的数量来触发执行,执行时只计算元素数量达到窗口大小的key对应的结果。注意: CountWindow的window_size指的是相同Key的元素的个数,不是输入的所有元素的总数。如:windowSize=4,输入(1,2,3,1,1,1)结果:(1,3),此时key为2和3的条数才1,达到4时才计算。

  1、滚动窗口:默认的CountWindow是一个滚动窗口,只需要指定窗口大小即可,当元素数量达到窗口大小时,就会触发窗口的执行。

  2、滑动窗口:滑动窗口和滚动窗口的函数名是完全一致的,只是在传参数时需要传入两个参数,一个是window_size:5,一个是sliding_size:2。若sliding_size设置为了2,也就是说,每收到两个相同key的数据就计算一次,每一次计算的window范围是5个元素。达到滑动步长的时候计算一次,达到滑动窗口大小的时候计算一次

三、解析windowAPI

 

flink中Time和window

上一篇:window10与Ubuntu之间的文件传输——FileZilla实现


下一篇:《刻意练习之C#》-0001- Hello World