Flink分区和窗口操作

分区(Partitioning)与分组(Grouping):

分区:

  • 将数据流划分为多个子流,每个子流由一个或多个子任务处理。
  • 通过 keyBy 操作实现,根据键对数据进行分区。
  • 数据具体去往哪个分区,是通过指定的 key 值先进行一次 hash 再进行一次MurmurHash,通过上述计算得到的值再与并行度进行相应的计算得到。
  • 分区的目的是实现数据并行处理,提高处理性能和吞吐量。

分组:

  • 根据特定键将数据进行逻辑上的划分,以便对相同键的数据进行聚合操作。
  • 结合窗口操作(如 timeWindow)使用,在分区后的数据流中对相同键的数据进行聚合计算。
  • 在聚合操作中,将相同键的事件聚合在一起进行处理。

示例:

DataStream<MyEvent> groupedStream = stream// keyBy 分区操作.keyBy(event -> event.getKey())// 分组操作.timeWindow(Time.minutes(5)).sum("value");

数据如果具有相同的 key 将一定去往同一个分组和分区,但是同一分区中的数据不一定属于同一组。

分区中的按键分区(Keyed)和非按键分区(Non-Keyed)

  • 按键分区窗口(Keyed Windows)
    • 经过按键分区keyBy操作后,数据流会按照key被分为多条逻辑流(logical streams),这就是KeyedStream。
    • 基于KeyedStream进行窗口操作时,窗口计算会在多个并行子任务上同时执行。相同key的数据会被发送到同一个并行子任务。
  • 非按键分区(Non-Keyed Windows)
    • 如果没有进行keyBy,那么原始的DataStream就不会分成多条逻辑流。窗口逻辑只能在一个任务(task)上执行,并行度为1。
    • 非按键分区的窗口操作,手动调大窗口算子的并行度也是无效的。
# Keyd windows
stream.keyBy().window()
# Non-Keyd windows
stream.windowAll()

窗口的分类

按照截取数据的方式(驱动类型)分类:

  • 时间窗口(Time Window): 时间点来截取数据。
  • 计数窗口(Count Window): 元素的个数来截取数据。

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

  • 滚动窗口(Tumbling Window)
    • 窗口之间不重叠,也不会有间隔。
    • 每个数据都会被分配到唯一的窗口中。
    • 可以用时间或者数量定义窗口的大小。
  • 滑动窗口(Sliding Window)
    • 类似滑动窗户,窗口大小固定,窗口之间可以重叠。
    • 参数有窗口的大小和滑动的步长。
    • 数据可以同时被分配到多个窗口中,适合结果更新非常快的场景。
    • 可以用时间或者数量定义窗口的大小。
  • 会话窗口(Session Window)
    • 通过会话来对数据进行分组,只能基于时间----会话的超时时间。
    • 会话的长度不固定,分区之间窗口没有关联,会话窗口之间一定是不会重叠的,并且可能会留有GapSize.
    • 适用保持会话的场景。
  • 以及全局窗口(Global Window)
    • 没有结束的窗口,包含所有的key,默认不会触发计算。
    • 预留用来自定义窗口函数。

窗口计算的4个重要的组成部分:

  1. assigner(分配器):如何将元素分配给窗口。
  2. function(计算函数):为窗口定义的计算。其实是一个计算函数,完成窗口内容的计算。
  3. triger(触发器):在什么条件下触发窗口的计算。
  4. evictor(退出器):定义从窗口中移除数据。

窗口的其他特性:

  • 窗口的区间是左闭右开,窗口的最大时间戳 = end - 1ms。
  • 当属于某个窗口的第一个元素到达,Flink 就会创建一个窗口。
  • 时间进展 >= 窗口最大时间戳 + 窗口允许延迟时间。这样的窗口就能销毁掉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁Memcached的Key长度极限:深入探索与实践

&#x1f511; 解锁Memcached的Key长度极限&#xff1a;深入探索与实践 Memcached是一种广泛使用的高性能分布式内存缓存系统&#xff0c;它通过减少数据库的读取次数来提高应用程序的性能。在Memcached中&#xff0c;每个缓存项都通过一个唯一的key来标识。然而&#xff0c;对…

秋招Java后端开发冲刺——并发篇1(线程与进程、多线程)

一、进程 1. 进程 进程是程序的一次动态执行过程&#xff0c;是操作系统资源分配的基本单位。 2. 进程和线程的区别 特性进程线程定义独立运行的程序实例&#xff0c;资源分配的基本单位进程中的一个执行单元&#xff0c;CPU调度的基本单位资源进程拥有独立的内存空间和资源线…

ubuntu安装miniconda、jupyer、ros2

miniconda: 类似于虚拟机 ,可以安装不同版本的python jupyer: python执行、调试命令工具 1.下载安装文件 wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh 2.安装minconda bash https://repo.anaconda.com/miniconda/Miniconda3-py…

傅雷家书思维导图的制作方法,分享制作技巧和软件!

在浩如烟海的书海中&#xff0c;《傅雷家书》以其独特的视角和深厚的情感&#xff0c;成为了无数读者心中的经典。那么&#xff0c;如何将这部饱含父爱的书信集转化为清晰易懂的思维导图呢&#xff1f;本文将为您详细解读傅雷家书思维导图的制作技巧&#xff0c;并推荐几款实用…

能自动铲屎的养猫救星?带你了解热门爆款智能猫砂盆的真实体验!

在谈论猫咪的日常生活时&#xff0c;我和朋友最经常聊的话题就是在各种各样的紧急情况下如何狼狈地赶回去给猫咪铲屎&#xff0c;毕竟猫砂盆里的屎但凡停留那么几小时&#xff0c;就要开始发臭了&#xff0c;一下班回去实在受不了那个味道&#xff0c;每次下班在家门口都想带个…

gemma2 vllm和ollama推理部署;openai接口调用、requests调用

参考: https://huggingface.co/google/gemma-2-9b https://ai.google.dev/gemma/docs/model_card_2?hl=zh-cn https://huggingface.co/blog/gemma2 发布了两个型号9B\27B 支持上下文长度有点短:4096 1、 ollama推理部署 升级ollama: curl -fsSL https://ollama.com/…

AVL许可证与版权保护

在数字化时代&#xff0c;知识产权保护成为企业发展的重要保障。AVL许可证与版权保护的关系密不可分&#xff0c;共同为企业筑起坚实的防线。本文将深入探讨AVL许可证在版权保护中的重要性、作用以及最佳实践&#xff0c;帮助企业更好地维护自身知识产权。 一、AVL许可证在版权…

高三才考试努力,请记住这些个学习方法,助你华丽逆袭

站在人生的十字路口&#xff0c;高三是整个人生中重要的转折点&#xff0c;这一年的学习成果直接影响我们未来的人生走向。站在我们求学生涯的高度上&#xff0c;高三也是特殊的一年&#xff0c;因为我们要用一整年的时间去复习旧知识。   如果你到了高三改意识到自己需要努力…

AMSA-UNet | 基于自注意力的多尺度 U-Net 提升图像去模糊性能

前言 传统的单尺度U-Net在去模糊过程中常常会导致空间信息的丢失,这影响了去模糊的准确性。此外,由于卷积方法在捕捉长距离依赖方面的局限性,恢复图像的质量下降。为了解决上述问题,提出了一种基于自注意力的非对称多尺度U-Net(AMSA-UNet)来提高去模糊方法在准确性和计算…

修改Springboot项目名称

修改Springboot项目名称 1. 整体描述2. 具体步骤2.1 修改module名称2.2 修改程序包名2.3 mybatis/mybatis-plus配置修改2.4 logback文件2.5 yml配置2.6 Application启动类2.7 其他 3. 总结 1. 整体描述 开发过程中&#xff0c;经常遇到新来个项目&#xff0c;需要一份初始代码…

【前端】HTML+CSS复习记录【5】

文章目录 前言一、padding、margin、border&#xff08;边框边距&#xff09;二、样式优先级三、var&#xff08;使用 CSS 变量更改多个元素样式&#xff09;四、media quary&#xff08;媒体查询&#xff09;系列文章目录 前言 长时间未使用HTML编程&#xff0c;前端知识感觉…

去中心化革命:探索区块链技术的前沿

随着信息技术的飞速发展&#xff0c;区块链技术作为一种新兴的去中心化解决方案&#xff0c;正逐渐改变着我们的经济、社会和技术格局。本文将从区块链的基本原理、当前的应用实例以及未来的发展趋势三个方面&#xff0c;深入探讨区块链技术在革命性变革中的角色和影响。 1. 区…

构建工程化:建立平台化工程体系

一、功能描述 工程化体系主要是解决能够统一进行打包的问题&#xff0c;故需要对整体进行描述 1.1、子项目描述 1.1.1、配置管理 对于每一个子项目而言&#xff0c;需要有专门的配置管理目录&#xff0c;目录的建议组建方式为conf/defalut和conf/local&#xff0c;其中defa…

TypeScript中,如何利用数组生成一个联合类型

本文由 ChatMoney团队出品 在开发中我们常常会遇到这样一个问题&#xff0c;代码如下&#xff1a; const arr ["a","b","c","d","e","f","g","h","i","j","k&quo…

利用区块链技术实现返利App的透明化追溯

利用区块链技术实现返利App的透明化追溯 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何利用区块链技术实现返利App的透明化追溯&#xff0c…

【信息学奥赛】CSP-J/S初赛06 信息编码(ASCLL码及汉字信息编码)

本专栏&#x1f449;CSP-J/S初赛内容主要讲解信息学奥赛的初赛内容&#xff0c;包含计算机基础、初赛常考的C程序和算法以及数据结构&#xff0c;并收集了近年真题以作参考。 如果你想参加信息学奥赛&#xff0c;但之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#…

51单片机点亮第一个LED灯

欢迎入群共同学习交流 时间记录&#xff1a;2024/7/2 一、电路原理图 二、代码程序 1.项目代码结构 2.主程序代码 #include <reg51.h>sbit ledP1^0;void delay(int ms) {int i0;while(ms--){for(i0;i<110;i);} }int main() {while(1){led 1;delay(1000);led 0;d…

01-android studio实现闪屏页功能

在Android开发中&#xff0c;闪屏页面是指应用程序启动时展示的第一个页面&#xff0c;通常用来展示应用的logo或者介绍信息&#xff0c;让用户在应用加载完毕前看到一个友好的界面。本文将介绍如何实现一个简单的Android闪屏页面。 一、创建一个新的SplashActivity 首先&…

EFCore_悲观锁与乐观锁(MySQL)

简述 悲观锁&#xff1a;对并发可能导致的资源抢占问题持悲观态度&#xff0c;总是认为会有其他的线程来抢占资源&#xff0c;所以会在实际上对资源上锁 乐观锁&#xff1a;对并发可能导致的资源抢占问题持乐观态度&#xff0c;并不对资源实际上锁&#xff0c;而是在对资源进行…

git 禁止dev合并到任何其他分支

创建 pre-merge-commit 钩子 导航到 Git 仓库的钩子目录&#xff1a; cd /path/to/your/repo/.git/hooks创建或编辑 pre-merge-commit 钩子&#xff1a; 也可以通过指令创建 nano pre-merge-commit在钩子文件中添加以下代码&#xff1a; #!/bin/sh# 获取当前分支名称 curr…