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

文章目录

    • 一. 状态使用概览
    • 二. 状态的数据类型
      • 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设计与实现:核心原理与源码解析》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系统学习】3.Linux用户和权限

Linux用户和权限 1.认知root用户 1.1 root用户(超级管理员) 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员) 而在前期&#…

海外云手机的核心优势

随着5G时代的到来,云计算产业正处于高速发展的时期,为海外云手机的问世创造了一个可信任的背景。在资源有限且需求不断增加的时代,将硬件设备集中在云端,降低个人用户的硬件消耗,同时提升性能,这一点单单就…

Vue3中路由配置Catch all routes (“*“) must .....问题

Vue3中路由配置Catch all routes (“*”) must …问题 文章目录 Vue3中路由配置Catch all routes ("*") must .....问题1. 业务场景描述1. 加载并添加异步路由场景2. vue2中加载并添加异步路由(OK)3. 转vue3后不好使(Error)1. 代码2. 错误 2. 处理方式1. 修改前2. 修…

分布式存储中常见的容错机制:多副本、纠删码(RS、LRC、SHEC)

文章目录 分布式存储中常见的容错机制浴缸原理多副本纠删码RSLRCSHEC 总结 分布式存储中常见的容错机制 浴缸原理 在存储领域中,通常我们会使用浴缸曲线来描述硬盘的故障率,如下图。 浴缸曲线 故障率随着时间变化,主要分为三个阶段&#x…

设计模式2-对象池模式

对象池模式,Object Pool Pattern,当你的应用程序需要频繁创建和销毁某种资源(比如数据库连接、线程、socket连接等)时,Object Pool 设计模式就变得很有用。它通过预先创建一组对象并将它们保存在池中,以便在…

数据结构——单链表详解

目录 前言 一.什么是链表 1.概念 ​编辑 2.分类 二.单链表的实现(不带头单向不循环链表) 2.1初始化 2.2打印 2.3创建新节点 2.4头插、尾插 2.5头删、尾删 2.6查找 2.7在指定位置之前插入 2.8在指定位置之后插入 2.9删除pos位置 2.10删除pos之后的 2.11销毁链表…

相机图像质量研究(8)常见问题总结:光学结构对成像的影响--工厂调焦

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

js中事件代理的解析和应用场景

文章目录 一、是什么二、应用场景三、总结 一、是什么 事件代理,俗地来讲,就是把一个元素响应事件(click、keydown…)的函数委托到另一个元素 前面讲到,事件流的都会经过三个阶段: 捕获阶段 -> 目标阶…

canvas绘制横竖坐标轴(带有箭头和刻度)

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

NLP_“预训练+微调大模型”模式和Prompt/Instruct模式的异同

文章目录 “预训练微调大模型”的模式以提示/指令模式直接使用大模型“预训练微调大模型”模式和Prompt/Instruct模式的异同小结 “预训练微调大模型”的模式 经过预训练的大模型所习得的语义信息和所蕴含的语言知识,很容易向下游任务迁移。NLP应用人员可以根据自己…

04-Java建造者模式 ( Builder Pattern )

建造者模式 摘要实现范例 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的 建造者模式属于创建型模式,它提供了一种创建对…

如何从 iPhone 上恢复永久删除的照片

您的 iPhone 上缺少照片吗?讽刺的是,iPhone 的许多高级功能可能正是这个问题如此普遍的原因。幸运的是,还有很多方法可以从 iPhone 恢复已删除的照片,具体取决于您设备的设置方式。 本文涵盖了所有这些内容。该过程根据您的具体情…

MongoDB从入门到实战之MongoDB工作常用操作命令

前言: 上一章节我们快速的在Docker容器中安装了MongoDB,并且通过Navicat MongoDB可视化管理工具快速的连接、创建数据库、集合以及添加了文档数据源。这一章节我们主要是了解一下在日常工作中MongoDB一些常用的操作命令。 MongoDB从入门到实战的相关教程…

并发编程 java锁机制

1、什么是锁,为什么需要锁? 并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题&#xff…

通过nginx学习linux进程名的修改

目录 1. 缘起2. 背景知识3. 源码分析3.1 准备工作3.2 设置进程名字 1. 缘起 在运行nginx的时候,用ps查看nginx的进程信息,可能的输出如下: root 42169 3105 0 16:51 ? 00:00:00 nginx: master process ./objs/nginx root …

计算两个数相除后的余数返回值为浮点型math.fmod(x, y)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算两个数相除后的余数 返回值为浮点型 math.fmod(x, y) [太阳]选择题 请问以下代码执行math.fmod()后输出的结果是? import math print("【执行】math.fmod(10, 4)"…

Qt 常用算法及正则表达式

目录 常用算法 正则表达式 常用算法 double c qAbs(a),函数 qAbs() 返回 double 型数值 a 的绝对值 double max qMax(b,c),函数 qMax() 返回两个数值中的最大值 int bnqRound(b),返回一个与浮点数最接近的整数值(四舍五入) int cn q…

巴尔加瓦算法图解:算法运用。

树 如果能将用户名插入到数组的正确位置就好了,这样就无需在插入后再排序。为此,有人设计了一种名为二叉查找树(binary search tree)的数据结构。 每个node的children 都不大于两个。对于其中的每个节点,左子节点的值都比它小,…

Hadoop搭建(完全分布式)

节点分布: bigdata-masterbigdata-slave1bigdata-salve2 NameNode NodeManager NodeManager SecondaryNameNodeDataNodeDataNodeResourceManagerNodeManagerDataNode 目录 一、jdk安装: 二、hadoop安装 一、jdk安装: jdk-8u212链接&am…

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例(802.1X认证) 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络,使用802.1X客户端进行认证,输入正确的用户名和密…