前言
数据,已经渗透到当今各行各业的价值创造过程中,成为核心生产要素之一。海量数据的挖掘和运用,已经初见成效。各大厂也在不断尝试用新的流式计算框架来对数据进行处理。其中Flink就是一个非常耀眼的存在。今天,这篇文章就重点介绍一下Flink作为一个实时流处理引擎,其最核心的时间和窗口机制。
Flink中的时间与窗口
大数据处理中有两种经典模式:批处理、流处理。Flink以流为核心,构建出了高性能、高可用的批流一体的分布式大数据计算引擎,在数据流上提供数据分发、通信、具备容错能力的分布式计算功能。
目前,Flink以流式计算引擎为基础,同样也支持批处理,并且提供了SQL、复杂事件处理CEP、机器学习、图计算等更高级的数据处理场景。
流式处理系统长期以来一直应用在提供低延迟、不准确/近似结果的场景里,通常结合批处理系统来提供最终正确的结果。而流批一体计算的设计核心,就是窗口。
时间类型
在Flink中定义了3种时间类型:
3种时间类型
在Flink应用中可以使用这3种时间类型,其中最常用的是事件时间和处理时间。
窗口类型
为了对数据进行切分处理,Flink中提供了3类默认窗口:计数窗口、时间窗口和会话窗口。
计数窗口(Count Window):分为滚动计数窗口和滑动计数窗口。
时间窗口((Time Window):分为滚动时间窗口和滑动时间窗口。
会话窗口((Session Window):是一种特殊的窗口,当超过一段时间,该窗口没有收到新的数据元素,即视为该窗口结束,所以无法事先确定窗口的长度、元素个数,窗口之间也不会相互重叠。
水印 Wartermark
水印用于处理乱序事件。数据总是可能因为各种原因导致延迟,比如网络延迟、数据乱序、背压、failover等。对于延迟太久的数据,不能无限制的等下去,所以必须有个机制,来保证特定的时间后一定会触发窗口进行计算,这个触发机制就是Wartermark。
Wartermark处理逻辑
小结
本文简要介绍了flink中的时间与窗口相关的内容。更详细的内容摘自《Deep in Flink:Flink内核原理与实现》。在书中,系统性介绍了Flink相关的基础知识、核心执行以及运维管理、时间与窗口、内存管理,作业的提交、调度以及执行等。