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

文章目录

    • 一. 状态使用概览
    • 二. 状态的数据类型
      • 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.hqwc.cn/news/459355.html

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

相关文章

postman执行批量测试

1.背景 有许多的人常常需要使用第三方系统进行重复的数据查询,本文介绍使用PostMan的方式对数据进行批量的查询,减少重复的劳动。 2.工具下载 3.初入门 一、如图示进行点击,创建collection 二、输入对应的名称 三、创建Request并进行查…

设计模式理解:单例模式+工厂模式+建设者模式+原型模式

迪米特法则:Law of Demeter, LoD, 最少知识原则LKP 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。 所以,在运用迪米特…

【Git版本控制 02】分支管理

目录 一、创建分支 二、切换分支 三、合并分支 四、删除分支 五、合并冲突 六、分支策略 七、bug分支 一、创建分支 # 当前仓库只有 master 一个主分支 # 可通过 git branch 是进行分支管理的命令,可通过不同参数对分支进行查看、创建、删除(base) [rootloc…

Open CASCADE学习|放样

在CAD(计算机辅助设计)建模中,放样是一种重要的技术,用于将二维图形或设计转化为三维模型。通过放样,设计师可以根据一系列二维剖面和一个或多个引导路径创建出复杂的三维形状。 CAD建模放样的基本步骤如下&#xff1…

TOP100 二叉树(二)

7.108. 将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1: 输入…

【知识图谱--第二讲知识图谱的表示】

知识图谱的表示 知识表示Knowledge Representation 知识表示方法知识图谱的符号表示基于图的知识表示与建模简单图建模-最简单的无向图有向标记图OWL与Ontology 知识图谱的向量表示 知识表示 Knowledge Representation 知识表示(KR)就是用易于计算机处…

『运维备忘录』之 TAR 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

微信小程序(三十八)滚动容器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.滚动触底事件 2.下拉刷新事件 源码&#xff1a; index.wxml <view class"Area"> <!-- scroll-y 垂直滚动refresher-enabled 允许刷新bindrefresherrefresh 绑定刷新作用函数bindscrollto…

计划任务功能优化,应用商店上架软件超过100款,1Panel开源面板v1.9.6发布

2024年2月7日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.6版本。 在v1.9.5和v1.9.6这两个小版本中&#xff0c;1Panel针对计划任务等功能进行了多项优化和Bug修复。此外&#xff0c;1Panel应用商店新增了3款应用&#xff0c;上架精选软件应用超过1…

精讲双向链表的销毁

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

STL常用算法

概述 算法主要由头文件<algorithm>、<numeric>、<functional>构成。 1、<algorithm>是所有STL头文件中最大的一个&#xff0c;范围涉及到遍历、排序、比较、查找、交换、复制、修改等等。 2、<numeric>体积很小&#xff0c;只包含几个序列上面…

e5 服务器具备哪些性能特点?

随着云计算和大数据技术的不断发展&#xff0c;服务器作为数据中心的核心设备&#xff0c;其性能特点也日益受到关注。其中&#xff0c;E5服务器作为当前主流的服务器类型之一&#xff0c;具备许多优秀的性能特点。本文将详细介绍E5服务器的性能特点&#xff0c;帮助读者更好地…