【大数据】Flink 架构(四):状态管理

Flink 架构(四):状态管理

  • 1.算子状态
  • 2.键值分区状态
  • 3.状态后端
  • 4.有状态算子的扩缩容
    • 4.1 带有键值分区状态的算子
    • 4.2 带有算子列表状态的算子
    • 4.3 带有算子联合列表状态的算子
    • 4.4 带有算子广播状态的算子

在前面的博客中我们指出,大部分的流式应用都是有状态的。很多算子都会不断地读取并更新某些状态,例如:窗口内收集的记录,输入源的读取位置或是一些定制的,诸如机器学习模型之类的特定应用状态。无论是内置状态还是用户自定义状态,Flink 对它们都一视同仁。本篇博客我们会对 Flink 支持的不同类别的状态进行介绍。我们将解释如何利用 状态后端state backend)对状态进行存储和维护,以及有状态的应用如何通过状态再分配实现扩缩容。

通常意义上,函数里所有需要任务去维护并用来计算结果的数据都属于任务的状态。你可以把状态想象成任务的业务逻辑所需要访问的本地或实例变量。下图展示了某个任务和它状态之间的典型交互过程。

在这里插入图片描述
任务首先会接收一些输入数据。在处理这些数据的过程中,任务对其状态进行读取或更新,并根据状态和输入数据计算结果。我们以一个持续计算接收到多少条记录的简单任务为例。当任务收到一个新的记录后,首先会访问状态获取当前统计的记录数目,然后把数目增加并更新状态,最后将更新后的数目发送出去。

应用读写状态的逻辑通常都很简单,而难点在于如何高效、可靠地管理状态。这其中包括如何处理数量巨大、可能超出内存的状态,如何保证发生故障时状态不会丢失。所有和状态一致性、故障处理以及高效存取相关的问题都由 Flink 负责搞定,这样开发人员就可以专注于自己的应用逻辑。

在 Flink 中,状态都是和特定算子相关联。为了让 Flink 的运行层知道算子有哪些状态,算子需要自己对其进行注册。根据 作用域 的不同,状态可以分为两类:算子状态operator state)和 键值分区状态keyed state),我们将在接下来介绍它们。

1.算子状态

算子状态的作用域是某个算子任务,这意味着所有在同一个并行任务之内的记录都能访问到相同的状态。算子状态不能通过其他任务访问,无论该任务是否来自相同算子。下图展示了任务访问算子状态的过程。

在这里插入图片描述
Flink 为算子状态提供了三类原语:

  • 列表状态list state):将状态表示为一个条目列表。
  • 联合列表状态union list state):同样是将状态表示为一个条目列表,但在进行故障恢复或从某个保存点启动应用时,状态的恢复方式和普通列表状态有所不同。
  • 广播状态broadcast state):专门为那些需要保证算子的每个任务状态都相同的场景而设计。这种相同的特性将有利于检查点保存或算子扩缩容。

2.键值分区状态

键值分区状态会按照算子输入记录所定义的键值来进行维护或访问。Flink 为每个键值都维护了一个状态实例,该实例总是位于那个处理对应键值记录的算子任务上。当任务在处理一个记录时,会自动把状态的访问范围限制为当前记录的键值。

因此所有键值相同的记录都能访问到一样的状态。下图展示了任务和键值分区状态的交互过程。

在这里插入图片描述
你可以把键值分区状态想象成一个在算子所有并行任务上进行分区(或分片)的键值映射。Flink 为键值分区状态提供了不同原语,它们的区别在于分布式键值映射中每个键所对应存储值的类型不同。我们接下来简要讨论一下键值分区状态最常用的几个原语。

  • 单值状态value state):每个键对应存储一个任意类型的值,该值也可以是某个复杂数据结构。
  • 列表状态list state):每个键对应存储一个值的列表。列表中的条目可以是任意类型。
  • 映射状态map state):每个键对应存储一个键值映射(map),该映射的键(key)和值(value)可以是任意类型。

通过这些状态原语,我们可以为 Flink 状态指定不同的结构,从而实现更加高效的状态访问。

3.状态后端

有状态算子的任务通常会对每一条到来的记录读写状态,因此高效的状态访问对于记录处理的低延迟而言至关重要。为了保证快速访问状态,每个并行任务都会把状态维护在本地。至于状态具体的存储。访问和维护,则是由一个名为 状态后端 的可插拔组件来决定。状态后端主要负责两件事:本地状态管理将状态以检查点的形式写入远程存储

对于本地状态管理,状态后端会存储所有键值分区状态,并保证能将状态访问范围正确地限制在当前键值。Flink 提供的一类状态后端会把键值分区状态作为对象,以内存数据结构的形式存在 JVM 堆中;另一类状态后端会把状态对象序列化后存到 RocksDB 中,RocksDB 负责将它们写到本地硬盘上。前者状态访问会更快一些,但会受到内存大小的限制;后者状态访问会慢一些,但允许状态变得很大。

由于 Flink 是一个分布式系统但只在本地维护状态,所以状态检查点就显得极其重要。而考虑到 TaskManager 进程以及它上面所有运行的任务都可能在任意时间出现故障,因此它们的存储只能看做是易失的。状态后端负责将任务状态以检查点形式写入远程持久化存储,该远程存储可能是一个分布式文件系统,也可能是某个数据库系统。不同的状态后端生成状态检查点的方式也存在一定差异。例如:RocksDB 状态后端支持增量检查点。这对于大规模的状态而言,会显著降低生成检查点的开销。

后续我们会详细讨论不同状态后端的区别以及它们各自的优劣。

4.有状态算子的扩缩容

流式应用的一项基本需求是 根据输入数据到达速率的变化调整算子并行度。对于无状态的算子,扩缩容很容易。但对于有状态算子,改变并行度就会复杂很多,因为我们需要把状态重新分组,分配到与之前数量不等的并行任务上。Flink 对不同类型的状态提供了四种扩缩容模式。

4.1 带有键值分区状态的算子

带有键值分区状态的算子 在扩缩容时会根据新的任务数量对键值重新分区。但为了降低状态在不同任务之间迁移的必要成本,Flink 不会对单独的键值实施再分配,而是会把所有键值分为不同的 键值组key group)。每个键值组都包含了部分键值,Flink 以此为单位把键值分配给不同任务。下图展示了键值分区状态通过键值组进行重新分区的过程。

在这里插入图片描述

4.2 带有算子列表状态的算子

带有算子列表状态的算子 在扩缩容时会对列表中的条目进行重新分配。理论上,所有并行算子任务的列表条目会被统一收集起来,随后均匀分配到更少或更多的任务之上。如果列表条目的数量小于算子新设置的并行度,部分任务在启动时的状态就可能为空。下图展示了算子列表状态的重分配过程。

在这里插入图片描述

4.3 带有算子联合列表状态的算子

带有算子联合列表状态的算子 会在扩缩容时把状态列表的全部条目广播到全部任务上。随后由任务自己决定哪些条且该保留,哪些该丢奔。下图展示了算子联合列表状态的重分配过程。

在这里插入图片描述

4.4 带有算子广播状态的算子

带有算子广播状态的算子 在扩缩容时会把状态拷贝到全部新任务上。这样做的原因是广播状态能确保所有任务的状态相同。在缩容的情况下,由于状态经过复制不会丢失,我们可以简单地停掉多出的任务。下图展示了算子广播状态的重分配过程。

在这里插入图片描述

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

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

相关文章

WinRAR压缩包高级技巧:永久设置压缩包单个或批量单独压缩成包并且不内嵌文件夹,解压保留原始时间设置

目录点击跳转:WinRAR压缩包高级技巧:永久设置压缩包单个或批量单独压缩成包并且不内嵌文件夹,解压保留原始时间设置 解压永久设置1 解压保存原始时间 压缩永久设置1 默认压缩成zip手机电脑都通用的格式2 默认压缩文件不多额外嵌套一层文件夹&…

【新书推荐】3.1节 布尔运算

本节内容:布尔运算,又称为逻辑运算或位运算。 ■布尔代数:and与、or或、not非、xor异或,按位运算。 3.1.1 布尔代数 ■布尔代数与二进制的关系 乔治布尔是一位英国小学数学老师,19世纪最重要的数学家之一。出版了《…

《HTML 简易速速上手小册》第2章:HTML 的标签和元素(2024 最新版)

文章目录 2.1 文本格式化标签(🎩✨📜 网页的“时尚搭配师”)2.1.1 基础示例:一篇博客的格式化2.1.2 案例扩展一:产品介绍页面2.1.3 案例扩展二:个人简历 2.2 链接和锚点(&#x1f6a…

matplotlib实现动画效果

实现正弦波动画 import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation import numpy as np# 创建图像和轴 fig, ax plt.subplots()# 生成平均分布在0~2*pi之间的100个坐标点 x_data np.linspace(0, 2 * np.pi, 100) # 画出初始图 line, ax.plo…

【漏洞复现】中移铁通禹路由器信息泄露漏洞

Nx01 产品简介 中移禹路由器支持宽带拨号、动态IP和静态IP三种上网模式,一般中国移动宽带的光猫都是智能光猫也就是光猫带路由器功能,中移禹路由器作为二级路由使用。 Nx02 漏洞描述 中移禹路由器ExportSettings处存在信息泄露漏洞,攻击者可以获取后台权限。 Nx03…

sqli.labs靶场(8-17关)

8、第八关(布尔盲注) id1显示You are in...........,id1单引号不显示,id1 --显示正常 这个应该是单引号闭合,接下来就和第七关差不多上脚本 爆库名长度:id1%27%20and%20length(database()){i}%20-- 爆库…

算法分析(概论)

目录 第一章 概论 1.算法的概念 1.定义 2.算法设计要求 3.算法的特性 4.算法描述 5.数据结构与算法 6.算法设计的基本步骤 2.算法分析 1.计算机资源 2.算法分析 3.评判算法效率的方法 4.算法时间复杂度分析 5.渐进符号 1.大Ο符号 2.大Ω符号 3.大Θ符号 4.三…

bert预训练模型下载

查看 bert 模型所支持的预训练模型有哪些 from transformers import BERT_PRETRAINED_MODEL_ARCHIVE_LIST print(BERT_PRETRAINED_MODEL_ARCHIVE_LIST) 运行结果会吧所有支持的模型打印出来,比如 bert-base-chinese 一般下载模型我们搜索到的都是去 https://hugg…

详解顺序结构双指针处理算法

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)

CSDN 成就一亿技术人! 今天讲讲再MySQL中使用percona-xtrabackup这个开源工具来实现在线备份。 CSDN 成就一亿技术人! 目录 介绍percona-xtrabackup 安装Percona 完整备份 备份流程 恢复流程 1.模拟文件损坏 2.滚回日志 3.恢复数据目录 4.授权…

可解释性人工智能(XAI)概述

文章目录 每日一句正能量前言可解释性人工智能(XAI)定义研究的作用应用领域XAI的目标后记 每日一句正能量 一个人若想拥有聪明才智,便需要不断地学习积累。 前言 人工智能(AI)的发展速度迅猛,并在许多领域…

【JavaScript】ECMA6Script es6

文章目录 一、 es6的介绍二、 es6的变量和模板字符串2.1 let 与 var2.2 const 与 var2.3 模板字符串 三、 es6的解构表达式四、 es6的箭头函数4.1 声明和特点4.2 实践和应用场景4.3 rest和spread 五、es6的对象创建和拷贝5.1 对象创建的语法糖5.2 对象的深拷贝和浅拷贝 六、es6…

Qt扩展-QXlsx读写Excel配置使用

QXlsx读写Excel配置使用 一、概述1. 功能概述2. 其他维护 二、安装1. 下载源码2. 配置项目3. 测试代码4. 运行结果 一、概述 项目介绍:https://qtexcel.github.io/QXlsx/Example.html GitHub:https://github.com/QtExcel/QXlsx/tree/master QXlsx 是一个…

2024年最适合开Palworld的游戏服务器

如果要开Palworld服务器,当然要选大内存的服务器 在雨云,你不仅可以 链接:雨云 - 新一代云服务提供商欢迎来到以用户体验为优先的雨云,我们提供稳定高速的国际虚拟主机,云服务器产品,强大的功能&#xff…

WindowsOS

C:. ├─PerfLogs,系统日志文件夹 ├─Program Files,程序文件 ├─Program Files(x86),程序文件(x86) ├─ProgramData,程序数据 ├─Windows,Windows系统文件夹 └─Us…

数据结构排序小结

排序类型小结 💦 插入排序直接插入排序希尔排序 💦 选择排序直接选择排序堆排序 💦 交换排序冒泡排序快速排序🐾霍尔版本补坑位版本前后指针版本非递归版本 💦 归并排序递归版本非递归版本 💦 性能测试 &am…

Kotlin 教程(环境搭建)

Kotlin IntelliJ IDEA环境搭建 IntelliJ IDEA 免费的社区版下载地址:Download IntelliJ IDEA – The Leading Java and Kotlin IDE 下载安装后,我们就可以使用该工具来创建项目,创建过程需要选择 SDK, Kotlin 与 JDK 1.6 一起使…

【数据结构与算法】6.栈

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

Qt编写手机端视频播放器/推流工具/Onvif工具

一、视频播放器 同时支持多种解码内核,包括qmedia内核(Qt4/Qt5/Qt6)、ffmpeg内核(ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6)、vlc内核(vlc2/vlc3)、mpv内核(mpv1/mp2)、…

《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)

文章目录 1.1 HTML 简介与历史(😉🌐👽踏上神奇的网页编程之旅)1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…