【Flink】超详细Window机制……(上)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 【Flink】超详细Window机制……

一、时间类型

  • 事件时间:指时间发生的时间,一旦确定之后再也不会改变。
  • 处理时间:指消息被计算引擎处理的时间,以各个计算节点的本地时间为准。
  • 摄取时间:指事件进去流处理系统的时间,对于一个事件来说,使用其被读取的那一刻时间戳。


640.png


二、窗口

2.1 窗口类型

  • Count Window(计算窗口)

       1)Tumble Count Window:累积固定个数的元素就视为一个窗口,该类型的窗口无法像时间窗口一样事先切分好。


       2)Sliding Count Window:累积固定个数的元素视为一个窗口,每超过一定个数的元素,则产生一个新的窗口。


  • Time Window(时间窗口)

       1)Tumble Time Window:表示在时间上按照事先约定的窗口大小切分的窗口,窗口之间不会相互重叠。


       关键属性有两个:


               1.Offset:窗口的起始时间。


               2.Size:窗口的长度。


       2)Sliding Time Window:表示在时间上按照事先约定的窗口大小、滑动步长切分的窗口,滑动窗口之间可能存在相互重叠的情况。


        关键属性有三个:


               1.Offset:窗口的起始时间。


               2.Size:窗口的长度。


               3.Slide:滑动距离。


  • Session Window(会话窗口)

       是一种特殊的窗口,当超过一段时间,该窗口没有收到新的数据元素,则视为该窗口结束,所以无法事先确定窗口的长度、元素个数,窗口之间也不会相互重叠。


       Session Window的4种实现:


       1)ProcessingTimeSessionWindows:处理时间会话窗口,使用固定会话间隔时长。


       2)DynamicProcessingTimeSessionWindows:处理时间会话窗口,使用自定义会话间隔时长。


       3)EventTimeSessionWindows:事件时间会话窗口,使用固定会话间隔时长。


       4)DynamicEventTimeSessionWindows:事件时间会话窗口,使用自定义会话间隔时长。


       会话窗口不同于事件窗口,它的切分依赖于事件的行为,而不是时间序列,所以在很多情况下会因为事件乱序使得原本相互独立的窗口因为新事件的到来导致窗口重叠,而必须要进行窗口的合并。


       窗口合并涉及3个要素:


       1)窗口对象合并和清理


       2)窗口State的合并和清理


       3)窗口触发器的合并和清理


      会话窗口合并逻辑图:


640.png


2.2 窗口原理与机制

窗口算子负责处理窗口,数据流源源不断进入算子,每一个数据元素进入算子时,首先会被交给WindowAssigner。WindowAssigner决定元素被放到哪个或哪些窗口,在这个过程中可能会创建新窗口或者合并旧的窗口。在Window Operator中可能同时存在多个窗口,一个元素可以被放入多个窗口中。


       数据进入窗口时,分配窗口和计算的逻辑图如下:


344ee6f3d29364ca523d6506af237895.png


2.3 WindowAssigner

      WindowAssigner用来决定某个元素被分配到哪个/哪些窗口中去。SessionWindowAssigner比较特殊,因为Session Window无法事先确定窗口的范围,是动态改变的。


5d6c4da037ec8130046afe11c7a04626.png


2.4 WindowTrigger

 Trigger触发器决定了一个窗口何时能够被计算或清除,每一个窗口都拥有一个属于自己的Trigger,Trigger上会有定时器,用来决定一个窗口何时能够被计算或清除。每当有元素加入该窗口,或者之前注册的定时器超时时,Trigger都会被调用。


       Trigger触发的结果如下:


       1)Continue:继续,不做任务操作。


       2)Fire:触发计算,处理窗口数据。


       3)Purge:触发清理,移除窗口和窗口中的数据。


       4)Fire + Purge:触发计算+清理,处理数据并移除窗口和窗口中的数据。


       当数据到来时,调用Trigger判断是否需要触发计算,如果调用结果只是Fire,则计算窗口并保留窗口原样,窗口中的数据不清理,数据保持不变,等待下次触发计算的时候再次执行计算。窗口中的数据会被反复计算,直到触发结果清理。在清理之前,窗口和数据不会释放,所以窗口会一直占用内存。


1073e3cb82d37d17baf1da6d5f195c3e.png


2.5 WindowEvictor

 Evictor 可以理解为窗口数据的过滤器,Evictor可在Window Function执行前或后,从Window中过滤元素。Flink内置了3种窗口数据过滤器。


2f0c651ef2fd7248f9c3da582ca725cb.png


  • CountEvictor:计数过滤器。在Window中保留指定数量的元素,并从窗口头部开始丢弃其余元素。
  • DeltaEvictor:阈值过滤器。本质上来说是一个自定义规则,计算窗口中每个数据记录,然后与一个事先定义好的阈值做比较,丢弃超过阈值的数据记录。
  • TimeEvictor:时间过滤器。保留Window中最近一段时间内的元素,并丢弃其余元素。
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
3月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
143 3
|
4天前
|
缓存 监控 数据处理
Flink 四大基石之窗口(Window)使用详解
在流处理场景中,窗口(Window)用于将无限数据流切分成有限大小的“块”,以便进行计算。Flink 提供了多种窗口类型,如时间窗口(滚动、滑动、会话)和计数窗口,通过窗口大小、滑动步长和偏移量等属性控制数据切分。窗口函数包括增量聚合函数、全窗口函数和ProcessWindowFunction,支持灵活的数据处理。应用案例展示了如何使用窗口进行实时流量统计和电商销售分析。
58 28
|
3月前
|
SQL 消息中间件 分布式计算
大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动&基于事件驱动
大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动&基于事件驱动
123 0
|
3月前
|
SQL 分布式计算 大数据
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
181 0
|
5月前
|
SQL 存储 Unix
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
89 2
|
5月前
|
存储 数据处理 Apache
超越传统数据库:揭秘Flink状态机制,让你的数据处理效率飞升!
【8月更文挑战第26天】Apache Flink 在流处理领域以其高效实时的数据处理能力脱颖而出,其核心特色之一便是状态管理机制。不同于传统数据库依靠持久化存储及 ACID 事务确保数据一致性和可靠性,Flink 利用内存中的状态管理和分布式数据流模型实现了低延迟处理。Flink 的状态分为键控状态与非键控状态,前者依据数据键值进行状态维护,适用于键值对数据处理;后者与算子实例关联,用于所有输入数据共享的状态场景。通过 checkpointing 机制,Flink 在保障状态一致性的同时,提供了更适合流处理场景的轻量级解决方案。
81 0
|
7月前
|
消息中间件 存储 NoSQL
Flink(十二)【容错机制】(4)
Flink(十二)【容错机制】
|
7月前
|
存储 缓存 算法
Flink(十二)【容错机制】(2)
Flink(十二)【容错机制】
|
3月前
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
52 0
|
3月前
|
SQL 消息中间件 分布式计算
大数据-115 - Flink DataStream Transformation 多个函数方法 FlatMap Window Aggregations Reduce
大数据-115 - Flink DataStream Transformation 多个函数方法 FlatMap Window Aggregations Reduce
50 0

热门文章

最新文章