Flink 中的时间及窗口类型
在 Flink 中定义了 3 种时间类型:事件时间(Event Time)、处理时间(Processing Time)和摄取时间(Ingestion Time)。
1、事件时间
事件时间指事件发生时的时间,一旦确定之后再也不会改变。例如,事件被记录在日志文件中,日志中记录的时间戳就是事件时间。通过事件时间能够还原出来事件发生的顺序。使用事件时间的好处是不依赖操作系统的时钟,无论执行多少次,可以保证计算结果是一样的,但计算逻辑稍微复杂,需要从每一条记录中提取时间戳。
2、处理时间
处理时间指消息被计算引擎处理的时间,以各个计算节点的本地时间为准。例如,在物理节点 1 处理时,处理时间(即当前系统时间)为 2023-02-05 12∶00∶00,然后交给下游的计算节点进程处理,此时的处理时间(即当前系统时间)为 2023-02-05 12∶00∶01。可以看到处理时间是在不停变化的。使用处理时间依赖于操作系统的时钟,重复执行基于窗口的统计作业,结果可能是不同的。处理时间的计算逻辑非常简单,性能好于事件时间,延迟低于事件时间,只需要获取当前系统的时间戳即可。
3、摄取时间
摄取时间指事件进入流处理系统的时间,对于与一个事件来说,使用其被读取的那一刻的时间戳作作为摄取时间。摄取时间一般使用得较少,从处理机制上来说,其类似于事件时间,在作业异常重启执行的时候,也无法避免使用处理时间的结果不准确的问题。一般来说,若在数据记录中没有记录时间,又想使用事件时间机制来处理记录,会选择使用摄取时间。
Flink 中提供了 3 类默认窗口:计数窗口(Count Window)、时间窗口(Time Window)和会话窗口(Session Window)。
4、Count Window
Tumble Count Window:累积固定个数的元素就视为一个窗口,该类型的窗口无法像时间窗口一样事先切分好。
Sliding Count Window:累积固定个数的元素视为一个窗口,每超过一定个数的原则个数,则产生一个新的窗口。
5、Time Window
Tumble Time Window:表示在时间上按照事先约定的窗口大小切分的窗口,窗口之间不会相互重叠
Sliding Time Window:表示在时间上按照事先约定的窗口大小、滑动步长切分的窗口,滑动窗口之间可能会存在相互重叠的情况。
6、Session Window
Session Window 是一种特殊的窗口,当超过一段时间,该窗口没有收到新的数据元素,则视为该窗口结束,所以无法事先确定窗口的长度、元数个数,窗口之间也不会相互重叠。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/9308f3107538f5bd7e049d093】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论