Apache Flink窗口详解

devtools/2024/9/23 2:27:51/

Apache Flink窗口详解

在这里插入图片描述

Apache Flink 的核心功能之一是窗口处理,它允许开发人员以基于时间或基于计数的方式分组和处理数据流。

窗口技术是一种根据某些标准将数据流划分为有限块(称为窗口)的技术。

窗口(Window)是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中,再对每个“桶”加以处理。

在这里插入图片描述

例如,您可以根据时间间隔(每 5 分钟)、事件计数(每 100 个事件)或会话边界(不活动间隙)定义窗口

在每个窗口内,您可以对数据进行各种操作,如聚合(总和、平均、计数)、转换(映射、过滤、连接)或复杂的业务逻辑。


窗口的分类

1.按照驱动类型分类

Flink中窗口并不是静态准备好的,而是动态创建——当有落在这个窗口区间范围的数据达到时,才创建对应的窗口。(事件驱动型)

在这里插入图片描述


2. 按照窗口分配数据的规则分类

(1)滚动窗口Tumbling Window

对滚动窗口是一种对数据流进行均匀切片的方式,窗口之间没有重叠,每个数据元素只能属于一个窗口

在这里插入图片描述

这种窗口形式最简单,适用于需要固定大小窗口的场景,而且每个数据元素都会被准确地分配到一个唯一的窗口中。

eg. 实时统计:例如每5分钟统计一次用户在线人数,使用5分钟的滚动窗口来进行累加计算。

在这里插入图片描述

  1. 固定的大小:滚动窗口有固定的窗口大小,例如每5分钟一个窗口

  2. 无重叠:不同于滑动窗口,滚动窗口之间没有重叠部分。

  3. 首尾相接窗口是连续的,每个窗口的开始和结束时间是紧密相连的,便于实现时间段内数据的精确统计。

  4. 唯一归属:每个数据元素只能属于一个窗口,不会被分配到多个窗口中。


(2)滑动窗口Sliding Window

  • 滑动窗口的大小也是固定的。
  • 但是窗口之间并不是首尾相接的,而是可以“错开”一定的位置。

在这里插入图片描述

  • 定义滑动窗口的参数有两个:除去窗口大小(window size)之外,还有一个“滑动步长”(window slide)它其实就代表了窗口计算的频率。

  • 窗口在结束时间触发计算输出结果,那么滑动步长就代表了计算频率

  • 当滑动步长小于窗口大小时,滑动窗口就会出现重叠,这时数据也可能会被同时分配到多个窗口中。而具体的个数就由窗口大小和滑动步长的比值(size/slide)来决定。

在这里插入图片描述

滑动窗口 vs 滚动窗口

  1. 窗口关系

    • 滚动窗口窗口之间是连续且不重叠的,每个数据元素只属于一个窗口窗口大小等于滑动步长,因此没有重叠。
    • 滑动窗口窗口可以重叠,窗口的开始时间和结束时间可以错开一定的位置。窗口大小和滑动步长是两个独立的参数,滑动步长决定了窗口之间的间隔和计算频率。
  2. 数据分配

    • 滚动窗口:每个数据元素只属于一个窗口,不会被分配到多个窗口中。
    • 滑动窗口窗口可以重叠,数据元素可能会被同时分配到多个窗口中,具体取决于窗口大小和滑动步长的比值。
  3. 适用场景

    • 滚动窗口:适合于需要按固定时间间隔进行数据统计和汇总的场景,例如每5分钟计算一次平均值。
    • 滑动窗口:适合于需要频繁更新计算结果的场景,允许在较短时间内连续进行数据分析和计算,例如每1分钟计算一次最近10分钟的数据趋势。

(3)会话窗口Session Window

  • 会话窗口根据数据元素的到达时间来动态定义窗口边界,而不是固定的时间间隔。这些窗口根据数据之间的会话超时时间(session timeout)来确定。

  • 如果相邻两个数据元素的到达时间间隔小于设定的超时时间(size),它们被视为属于同一个会话窗口。超过超时时间的数据则被视为新的会话开始。

  • 会话窗口的长度和位置是动态的,取决于数据元素到达的时间模式。因此,起始和结束时间是不确定的,窗口的边界会根据数据的到达时间自动调整。

  • 不同会话窗口之间是不会重叠的,每个会话窗口都会有一定的间隔(session gap),保证相邻的会话窗口不会重叠。

在这里插入图片描述


(4)全局窗口Global Window

  1. 全局有效性

    • 全局窗口会将所有具有相同key的数据分配到同一个窗口中,无论它们到达的时间点如何。这保证了所有相关数据可以被视为一个整体进行处理。
  2. 没有固定结束时间

    • 与时间窗口不同,全局窗口没有预定义的结束时间点。它会持续收集数据,直到触发条件满足并触发计算。
    • Flink中的计数窗日(Count Window)底层就是用全局窗口实现的。
      在这里插入图片描述
  3. 触发器的自定义需求

    • 为了触发全局窗口中的计算,需要定义一个触发器(Trigger)。触发器可以基于多种条件来决定何时触发对窗口中数据的计算操作,例如数据量达到一定阈值或者时间间隔超过一定时间等。

在这里插入图片描述

eg:

假设有一个实时数据流,需要计算每个用户的累计点击次数,但不想每隔固定时间进行计算,而是希望在某个用户的点击次数达到一定数量时立即计算。这时可以使用全局窗口和相应的触发器来实现:

  • 定义一个全局窗口,确保所有属于同一用户的数据都被收集到同一个窗口中。
  • 配置一个触发器,当某个用户的点击次数达到设定的阈值时,触发对该用户数据的计算操作,例如计算累计点击次数。

窗口化的好处

窗口化对于流处理至关重要,因为它使我们能够处理两个主要挑战:无限数据和无序数据。

  • 与批处理不同,批处理有一组固定且有限的数据要处理,而流处理处理的是连续到达的无限数据。这意味着我们不能等待所有数据到达后再处理它,因为我们永远不会完成。

  • 相反,我们需要在数据到达时以增量方式处理数据,并产生部分或近似结果。窗口化通过将流分解为可以独立处理的可管理块来帮助我们做到这一点。

流处理的另一个挑战是数据可能无序到达,这意味着事件可能与其时间戳不一致。这可能是由于网络延迟、时钟偏差或其他原因造成的。

  • 无序数据会影响结果的正确性和一致性,尤其是在我们依赖基于时间的窗口时。
  • 例如,如果我们想从传感器读数流中计算每小时的平均温度,我们可能会错过一些迟到且属于前一小时的读数。窗口化通过提供为事件分配时间戳和水印的机制,以及指定如何处理延迟事件,帮助我们处理无序数据。


http://www.ppmy.cn/devtools/85041.html

相关文章

Apache DolphinScheduler 3.2.2 版本正式发布!

Apache DolphinScheduler 3.2.2 版本正式发布! 近日,Apache DolphinScheduler 发布了 3.2.2 版本。此版本主要基于 3.2.1 版本进行了 bug 修复,新增若干特性,并进行了众多改进和 Bug 修复,以及文档修复等。 &#x1…

SpringBoot3:轻松使用Jasypt实现配置文件信息加密

文章目录 前言一、概述1.1 Jasypt库简介1.2 Jasypt库的主要特点 二、开发环境三、Jasypt集成到SpringBoot33.1 引入依赖3.2 配置Jasypt3.3 加密配置文件信息3.3.1 方案一(不推荐)a.编写测试类生成加密后的配置文件信息b.运行c.修改原本的配置文件信息 3.…

react中如何mock数据

1.需求说明 因为前后端分离开发项目,就会存在前端静态页面写好了,后端数据接口还没写好;这时候前端就需要自己定义数据来使用。 定义数据有三种方式:直接写死数据、使用mock软件、json-server工具 这里讲解通过json-server工具…

大模型算法面试题(十二)

本系列收纳各种大模型面试题及答案。 1、领域模型Continue PreTrain数据如何选取 在领域模型的Continue PreTrain(持续预训练)过程中,数据选取是一个至关重要的步骤,它直接影响模型在特定领域上的性能和泛化能力。以下是一些关于…

网站漏洞扫描软件Burp suite和Xray安装应用及联合使用

目录 1、网站漏洞扫描软件应用-Burp suite 01 burp 扫描工具使用介绍: 02 burp 扫描工具安装过程: 1)获取扫描工具程序包 2)安装部署扫描工具 3)bp安装完毕的基础设置: 3.1)抓取浏览器访…

Python:Flask模板语法jinja2之默认值过滤器

方式一 {{ value | default(default) }}方式二 {{ value or default }}参考文章 十三:jinja2过滤器之default过滤器和or过滤器

【NPU 系列专栏 2.4 -- 高速互连 NVLink 详细介绍】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NVLink 简介NVLink 主要特点NVLink 应用场景NVLink 工作原理NVLink 实例介绍DL 中使用 NVLinkHPC 中使用 NVLinkSummaryNVLink 简介 NVLink 是 NVIDIA 开发的一种高速互连技术,旨在提升 GPU 与 GPU 之间以及 GPU 与 CPU 之间的…

C++学习笔记05-偏八股向知识(问题-解答自查版)

前言 以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。 本文对读者可以用作自查,答案在后面&#xff0…