背景
在flink中有两种不同的时间处理语义,一种是基于算子处理时间的时间,也就是以flink的算子所在的机器的本地时间为准,一种是事件发生的实际时间,它只与事件发生时的时间有关,而与flink算子的所在的本地机器的本地时间无关
处理时间VS事件时间
我们假设有一个手机位置信息的应用不停的向flink应用提供位置信息,对于flink来说,假设不论是事件时间还是处理时间,都是以一分钟为时间窗口,此时正常情况下手机会把每秒自己的位置信息发送到flink中,这样不论是基于事件时间还是处理时间的窗口,每分钟其实都会收到60个事件,但假如我们的手机信号中断,导致本应该发送的位置信息延迟发送了,那么此时基于处理时间的窗口和基于事件时间的窗口的语义就完全不一样了,见下图
此时对于处理时间的窗口来说,前一分钟窗口可能只有少数的几个事件,而后一分钟的窗口包含了超过60个事件。
然而对于事件时间的窗口来说,由于它是基于事件发生的事件,所以可以做到正确的把这些延迟的事件也正确归类到对应的一分钟事件窗口中.