Flink窗口(window)可以用于keyed streams和non-keyed streams
参考官方文档:https://nightlies.apache.org/flink/flink-docs-master/zh/docs/dev/datastream/operators/windows/
1.一些概念
1.时间语义
flink支持3种时间语义,分别是Event time,Processing time和Ingestion time。
参考:https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/learn-flink/streaming_analytics/
1.Event time
Event time的时间戳是每个单独事件在其产生设备上发生的时间。Event time通常在record进入Flink之前就嵌入到record中,这样就可以从每条record中提取事件时间戳。在Event time中,时间的进程取决于数据,而不是任何时钟。Event time程序必须指定如何生成Event time watermarks,这是一种以事件时间表示进度的机制。
在理想情况下,Event time处理将产生完全一致和确定的结果,而不管事件何时到达或它们的顺序如何。然而,除非事件是按顺序到达的(按时间戳),否则事件时间处理在等待乱序事件时会产生一些延迟。因为只能等待一段有限的时间,这就限制了Event time应用程序的确定性。
2.Processing time
Processing time是指执行相应operator的机器的系统时间。
当流处理程序在Porcessing time上运行时,所有基于时间的操作(如时间窗口)将使用运行相应操作的机器的系统时钟。每小时的处理时间窗口将包括在系统时钟显示整个小时的时间之间到达特定操作员的所有记录。例如,如果应用程序在上午9点15分开始运行,第一个小时处理时间窗口将包括上午9点15分到10点之间处理的事件,下一个窗口将包括上午10点到11点之间处理的事件,以此类推。
Processing time是最简单的时间概念,不需要流和机器之间的协调。它提供了最好的性能和最低的延迟。然而,在分布式和异步环境中,处理时间不提供确定性,因为它容易受到记录到达系统中的速度(例如从消息队列)、记录在系统内部操作符之间流动的速度以及中断(计划或其他)的影响。
3.Ingestion time
Flink在采集事件时记录的时间戳
全文 >>