【状态管理一】概览:状态使用、状态分类、状态具体使用

文章目录

    • 一. 状态使用概览
    • 二. 状态的数据类型
      • 1. 算子层面
      • 2. 接口层面
        • 2.1. UML与所有状态类型介绍
        • 2.2. 内部状态:InternalKvState

将知识与实际的应用场景、设计背景关联起来,这是学以致用、刨根问底知识的一种直接方式。

本文介绍

  • 状态数据管理,了解InternalKvState接口的设计以及KeyedState和OperatorState在实现上的区别;
  • 状态数据初始化的流程,了解有状态计算的底层实现原理。

 

一. 状态使用概览

flink中状态存在的意义是什么,涉及到哪些场景。

  1. 实时聚合:比如,计算过去一小时内的平均销售额。这时,你会需要使用到Flink的状态来存储过去一小时内的所有销售数据。
  2. 窗口操作:Flink SQL支持滚动窗口、滑动窗口、会话窗口等。这些窗口操作都需要Flink的状态来存储在窗口期限内的数据。
  3. 状态的持久化与任务恢复:实时任务挂掉之后,为了快速从上一个点恢复任务,可以使用savepoint和checkpoint。
  4. 多流join:Flink至少存储一个流中的数据,以便于在新的记录到来时进行匹配。

 

二. 状态的数据类型

从数据集与接口实现两个层面介绍状态分类,与状态的全部类型

1. 算子层面

分类

根据DataStream数据集是否基于Key进行分组,可将算子中的状态数据分为KeyedState和OperatorState两种类型。

应用位置

  • KeyedState用于经过DataStream.keyby()操作后形成的KeyedStream,并按照Key对状态数据进行分区。
  • OperatorState和并行的算子实例绑定,与数据元素中的Key无关。每个算子实例中都持有一部分状态数据,并支持在算子并行度发生变化时自动重新分配状态数据。

两者区别
在这里插入图片描述

 

2. 接口层面

状态数据通过统一的状态接口来表示,并根据不同的状态数据类型和使用方式区分接口实现。如下:

  • MapState:用于存储分区的Key-Value类型状态数据,此类型状态支持添加、更新和获取操作。
  • ValueState:用于单值类型的状态数据,并支持获取和更新状态的方法
  • ReadOnlyBroadcastState:提供只读操作的BroadcastState,仅提供get()、contains()等只读方法。
2.1. UML与所有状态类型介绍

在这里插入图片描述

  • BroadcastState:用于存储BroadcastStream中的状态数据,BroadcastState中的数据会被发送到指定算子的所有实例中,并保证每个实例中的数据都相同。
  • AppendingState:支持累积操作的状态数据。写入的数据元素可以存储在类似List的Buffer数据结构中,也可以聚合成单个Value进行存储。
  • MergingState:在AppendingState的基础上增加了合并状态的操作。两个MergingState实例可以合并成一个状态。
  • AggregatingState:用于支持基于AggregateFunction转换的状态数据,通过状态中的AggregateFunction可以对接入的数据进行聚合计算,产生聚合状态结果。
  • ListState:以数组结构类型存储状态数据,用户可通过自定义函数访问和处理状态数据。
  • ReducingState:用于支持ReduceFunction操作状态,给状态添加数据元素后,通过ReduceFunction实现聚合。ReducingState只支持在KeyedStream中获取。

以上就是Flink支持的全部状态类型,不管是用户还是Flink系统内部,都基于这些状态接口实现状态数据的操作,以满足有状态计算的需求。

 

2.2. 内部状态:InternalKvState

InternalKvState接口中定义的方法不对用户开放,在接口上会通过Internal进行标记,专门用于系统内部访问状态数据的辅助操作方法。一方面是为了避免引起混淆,另一方面是因为在各个发行版本中,InternalKvState接口的方法是不稳定的。

在InternalKvState接口中提供了 获取和设定命名空间、获取Raw状态和合并状态的方法,以及获取状态Key和Value等类型序列化器的方法。和状态接口作为所有状态数据的根节点相似,InternalKvState也是所有内部状态的根节点。

在这里插入图片描述

不管是基于堆内存还是RocksDB实现的状态存储后端,都同时继承和实现了InternalState接口和具体状态类型的接口。

例如

  • 基于堆内存存储的状态类型有HeapAggregatingState、HeapListState及HeapReducingState等;
  • 基于RocksDB存储的状态类型有RocksDBAggregatingState、RocksDBListState及RocksDBReducingState等。

在这里插入图片描述

 

参考:《Flink设计与实现:核心原理与源码解析》

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

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

相关文章

pytorch入门第一天

今天作为入门pytorch的第一天。打算记录每天学习pytorch的一些理解和笔记,以用来后面回顾。当然如果能帮到和我一样的初学者,那也是不胜荣幸。作为一名初学者,难免有些地方会现错误,欢迎各位大佬指出 预备知识 这里主要介绍pyto…

【数据结构】堆(创建,调整,插入,删除,运用)

目录 堆的概念: 堆的性质: 堆的存储方式: 堆的创建 : 堆的调整: 向下调整: 向上调整: 堆的创建: 建堆的时间复杂度: 向下调整: 向上调整&#xff…

2023年06月CCF-GESP编程能力等级认证C++编程二级真题解析

一、单选题(每题2分,共30分) 第1题 高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。 A. 编辑 B. 保存 C. 调试 D. 编译 答案:D 第2题 能够实现下面流程图功能的伪代码是( )。 A. if 条件判断 then 语句块 B. if 条件判断 then 什么…

vue项目打包部署到flask等后端服务里面,实现前后端不分离部署,解决空白页面和刷新页面not fount问题

1. 编译模式一定要设置为esnext,否则会报错: Strict MIME type checking is enforced for module scripts per HTML spec.Expected a JavaScript module script but the server responded with a MIME type of "text/plain". 具体解释可以看vi…

Leetcode 第 382 场周赛题解

Leetcode 第 382 场周赛题解 Leetcode 第 382 场周赛题解题目1:3019. 按键变更的次数思路代码复杂度分析 题目2:3020. 子集中元素的最大数量思路代码复杂度分析 题目3:3021. Alice 和 Bob 玩鲜花游戏思路代码复杂度分析 题目4:302…

停车场|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)

停车场管理系统目录 目录 基于Springboot的停车场管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 (1)车位管理 (2)车位预订管理 (3)公告管理 (4&#…

Vulnhub-Empire靶机-详细打靶流程

渗透思路 1.确认靶机IP地址2.端口服务扫描3.敏感目录扫描4.ffuf命令在这个目录下,继续使用ffuf工具扫描 5.ssh私钥爆破1.将私钥写进sh.txt中2.将私钥转换为可以被john爆破的形式3.通过John爆破 6.ssh私钥登陆7.icex64提权8.arsene提权 1.确认靶机IP地址 ┌──(roo…

浏览器F12调试

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

Tomcat之虚拟主机

1.创建存放网页的目录 mkdir -p /web/{a,b} 2.添加jsp文件 vi /web/a/index.jsp <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <html> <head><title>JSP a page</title> </head> …

PAT-Apat甲级题1009(python和c++实现)

PTA | 1009 Product of Polynomials 1009 Product of Polynomials 作者 CHEN, Yue 单位 浙江大学 This time, you are supposed to find AB where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lin…

Matplotlib绘制炫酷散点图:从二维到三维,再到散点图矩阵的完整指南与实战【第58篇—python:Matplotlib绘制炫酷散点图】

文章目录 Matplotlib绘制炫酷散点图&#xff1a;二维、三维和散点图矩阵的参数说明与实战引言二维散点图三维散点图散点图矩阵二维散点图进阶&#xff1a;辅助线、注释和子图三维散点图进阶&#xff1a;动画效果和交互性散点图矩阵进阶&#xff1a;调整样式和添加密度图总结与展…

stable_diffusion提示词编写笔记(1)

stable_diffusion提示词编写笔记(1) start 总结一下AI绘画学到的知识。 一.提示词分两种&#xff1a; 1.正向提示词&#xff1b; 2.反向提示词&#xff1b; 一个对应你希望图形包含的内容提示词&#xff0c;一个对应你不希望图形出现的内容提示词。 二.如何书写提示词 1.内…

记一次VulnStack渗透

信息收集 netdiscover的主机发现部分不再详解&#xff0c;通过访问端口得知20001-2003端口都为web端口&#xff0c;所以优先考虑从此方向下手 外网渗透 GetShell Struct漏洞 访问2001端口后&#xff0c;插件Wappalyzer爬取得知这是一个基于Struct的web站点&#xff0c;直接…

gtkmm4 应用程序使用 CSS 样式

文章目录 前言css选择器css文件示例源代码效果 前言 程序样式和代码逻辑分离开 使代码逻辑更可观 css选择器 Cambalache提供了两种css-classes 相当于css里的类名:class“类名”css-name 相当于css里的标签名:spin div p 啥的 如上我设置了这个按钮控件的类名为testButton 标…

【Java】万万没想到,又被问ThreadLocal了

我待ThreadLocal如初恋&#xff0c;ThreadLocal虐我千百遍。但这一次&#xff0c;要彻底搞懂ThreadLocal 回顾一下面试名场面&#xff1a; 面试官&#xff1a;Handler如何做到与线程绑定的&#xff1f; 我&#xff1a;每个Handler只有一个相关联的Looper&#xff0c;线程绑定…

如何开始深度学习,从实践开始

将“如何开始深度学习”这个问题喂给ChatGPT和文心一言&#xff0c;会给出很有专业水准的答案&#xff0c;比如&#xff1a; 要开始深度学习&#xff0c;你可以遵循以下步骤&#xff1a; 学习Python编程语言的基础知识&#xff0c;因为它在深度学习框架中经常被使用。 熟悉线性…

自然人如何代开发票

1&#xff1a;登录国家税务总局深圳市电子税务局 地址&#xff1a;国家税务总局深圳市电子税务局 2&#xff1a;个人所得税APP 扫描登录 或 身份证登录 3&#xff1a;选择 自然人代开增值税电子普通发票 4&#xff1a;申请代开 5&#xff1a;人脸识别 6&#xff1a;画框的…

【每日一题】LeetCode——链表的中间结点

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

【Python4Delphi】学习笔记(一):介绍篇

一、前言&#xff1a; 1. python语言简介&#xff1a; 众所周知&#xff0c;python是目前非常流行的编程语言之一&#xff0c;自20世纪90年代初Python语言诞生至今&#xff0c;它已被逐渐广泛应用于系统管理任务的处理和Web编程。 由于Python语言的简洁性、易读性以及可扩展性…

苏宁易购移动端首页(rem布局)

技术选型 方案∶采取单独制作移动页面方案技术:布局采取rem适配布局( less rem &#xff0b;媒体查询)设计图:设计图采用750px设计尺寸 设置视口标签以及引入初始化样式 <meta name"viewport" content"widthdevice-width, initial-scale1.0, user-scalable…