一、Time
(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)
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)
3、Session Windows(会话窗口):session窗口跟滚动窗口和滑动窗口相比,不会有重叠和固定的开始时间和结束时间的情况,相反,当它在一个固定的时间周期内不再收到元素,即非活动间隔产生,那个这个窗口就会关闭。特点:时间无对齐。由一系列事件组合一个指定时间长度的timeout间隙组成,类似于web应用的session,也就是一段时间没有接收到新数据就会生成新的窗口。
val sessionCnts: DataStream[(Int, Int)] = vehicleCnts.keyBy(0).window(ProcessingTimeSessionWindows.withGap(Time.seconds(30))).sum(1)
(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
原文:https://www.cnblogs.com/hdc520/p/13021860.html