Flink系列之Flink中StateBackend深入剖析和应用

news2024/11/20 8:45:46

title: Flink系列


一、Flink StateBackend 深入剖析和应用

​ StateBackend 定义了状态是如何存储的,不同的 State Backend 会采用不同的方式来存储状态,核心入口是: StateBackend, Flink 提供了三种不同形式的存储后端,分别是 MemoryStateBackend, FsStateBackend 和 RocksDBStateBackend。

  • MemoryStateBackend 会将工作状态(Task State)存储在 TaskManager 的内存中,将检查点(Job State)存储在 JobManager 的内存中,速度很快,不支持持久化,通常用来存储一些 state 量小的情况下的 state。这种方式是非常不安全的,且受限于JobManager的内存大小,主要在开发调试中使用。

  • FsStateBackend 会将工作状态存储在 TaskManager 的内存中,将检查点存储在文件系统中(通常是分布式文件系统),用来存储 state 量比较大的,window 窗口很长的一些 job 的 state 比较合适。生产环境常用此方案。

  • RocksDBStateBackend 会把状态存储在 RocksDB 中,将检查点存储在文件系统中(类似 FsStateBackend),和 MemoryStateBackend 对比是速度快,GC 少,支持异步 Snapshot 持久化。用来存储 state 量比较大的,window 窗口很长的一些 job 的 state 比较合适。

​ 综上所述,MemoryStateBackend 和 FsStateBackend 都是在内存中进行状态管理,所以可以获取较低的读写延迟,但会受限于 TaskManager 的内存大小;而RocksDBStateBackend 直接将 State 存储到 RocksDB 数据库中,所以不受 JobManager 的内存限制,但会有读写延迟,同时 RocksDBStateBackend 支持增量备份,这是其他两个都不支持的特性。一般来说,如果不是对延迟有极高的要求,RocksDBStateBackend 是更好的选择。

​ 淘汰掉原来的三种实现,提供两种新的实现的目的:为了接口统一!底层原理没变。window编程也被统一了,Time编程也被统一了。

配置:
state.backend: hashmap
state.checkpoint-storage: jobmanager
state.checkpoints.dir: hdfs://hadoop10/flink/checkpoints
state.savepoints.dir: hdfs://hadoop10/flink/savepoints

实现支持MemoryStateBackend
HashMapStateBackend
FsStateBackend
HashMapStateBackend
RocksDBStateBackend
EmbeddedRocksDBStateBackend
代号jobmanager
hashmap
filesystem
hashmap
rocksdb
Task StateTaskManager 堆内存中TaskManager 堆内存中TaskManager 中的 RocksDB 实例中
Job StateJobManager 堆内存中
hashmap 的话基于 CheckpointStorage 来定
外部高可用文件系统,比如 HDFS
hashmap 的话基于 CheckpointStorage 来定
外部高可用文件系统,比如 HDFS
缺点只能保存数据量小的状态
状态数据有可能会丢失
状态大小受TaskManager内存限制(默认支持5M)状态访问速度有所下降
优点开发测试很方便
性能好
状态访问速度很快
状态信息不会丢失
可以存储超大量的状态信息
状态信息不会丢失
使用场景本地开发测试State 量比较大
分钟级 window 窗口的状态数据
生产环境使用
State 量超大
小时级 window 窗口的状态数据
生产环境使用

细粒度:Task State: 一个 Application 会运行很多的 Task, 每个 Task 运行的时候,都有自己的状态, 故障转移 = FailOverStrategy

  • 要么是 TaskManager 的堆内存

  • 要么是 RocksDB 中

粗粒度:Job State:在某个时候,通过某种手段(checkpoint)把这个 job 的所有 Task 的 state 做一个持久化,就形成了 job 的 state, 重启策略 = RestartStrategy

  • 要么是 JobManager 的堆内存

  • 要么是外部的高可用系统中,可以是HDFS

Flink StateBackend 的三种实现对比:

1.1 MemoryStateBackend

​ 默认情况下,状态信息是存储在 TaskManager 的堆内存中的,checkpoint 的时候将状态保存到 JobManager 的堆内存中。

缺点:
	只能保存数据量小的状态
	状态数据有可能会丢失
优点:
	开发测试很方便

在这里插入图片描述

1.2 FSStateBackend

状态信息存储在 TaskManager 的堆内存中的,checkpoint 的时候将状态保存到指定的文件中 (HDFS 等文件系统)

缺点:
	状态大小受TaskManager内存限制(默认支持5M)
优点:
	状态访问速度很快
	状态信息不会丢失
用于:
	生产,也可存储状态数据量大的情况

在这里插入图片描述

1.3 RocksDBStateBackend

​ 状态信息存储在 RocksDB 数据库 (key-value 的数据存储服务), 最终保存在本地文件中。checkpoint 的时候将状态保存到指定的文件中 (HDFS 等文件系统)

缺点:
	状态访问速度有所下降
优点:
	可以存储超大量的状态信息
	状态信息不会丢失
用于:
	生产,可以存储超大量的状态信息

在这里插入图片描述

二、Flink StateBackend 原理剖析与实践

第一种:单任务调整

修改当前任务代码
env.setStateBackend(new FsStateBackend("hdfs://hadoop10/flink/checkpoints"));
env.setStateBackend(new MemoryStateBackend());
env.setStateBackend(new RocksDBStateBackend(filebackend, true));

第二种:全局调整

修改 flink-conf.yaml
state.backend: filesystem
state.checkpoints.dir: hdfs://hadoop10/flink/checkpoints

注意:state.backend的值可以是下面几种:
1、jobmanager(MemoryStateBackend)
2、filesystem(FsStateBackend)
3、rocksdb(RocksDBStateBackend)

MemoryStateBackend(老版本的默认实现) 和 FsStateBackend 的代码写法,其实它们已经被废弃,建议使用:HashMapStateBackend(新版本的默认实现)

用的是HashMapStateBackend,但是给job级别的数据保存到 Job Manager 的堆内内存中:

// HashMapStateBackend 替代 MemoryStateBackend
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 1、设置使用 HashMapStateBackend,Task State 存储在 TaskManager 的堆内存中
env.setStateBackend(new HashMapStateBackend());
// 2、这样设置 checkpoint 的 state 存储方式:把 job State 存储在 JobManager 的堆内存中
env.getCheckpointConfig().setCheckpointStorage(new JobManagerCheckpointStorage());

用的是HashMapStateBackend,但是给job级别的数据保存到 Job Manager 的外面的高可用系统HDFS中:

// HashMapStateBackend 替代 FsStateBackend
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 1、设置使用 HashMapStateBackend,Task State 存储于 TaskManager 堆内存中
env.setStateBackend(new HashMapStateBackend());
// 2、需要设置外部高可用文件系统存储路径用来保存 Job State
env.getCheckpointConfig().setCheckpointStorage("hdfs://hadoop10/flink/checkpoints");

RocksDBStateBackend 代码写法,其实 RocksDBStateBackend 也已经被废弃,建议使用 EmbeddedRocksDBStateBackend

// EmbeddedRocksDBStateBackend
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 1、设置 EmbeddedRocksDBStateBackend,Task State 存储在 RocksDB 中(内存+磁盘)
env.setStateBackend(new EmbeddedRocksDBStateBackend());
// 2、设置外部高可用文件系统存储路径用来保存 Job State
env.getCheckpointConfig().setCheckpointStorage("hdfs://hadoop10/flink/checkpoints");

如果使用 RocksDB 的方式,需要引入依赖:

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-statebackend-rocksdb -->
<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-statebackend-rocksdb_2.12</artifactId>
	<version>1.14.3</version>
	<scope>test</scope>
</dependency>


声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


By luoyepiaoxue2014

B站: https://space.bilibili.com/1523287361 点击打开链接
微博地址: http://weibo.com/luoyepiaoxue2014 点击打开链接

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

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

相关文章

Antd React UMI 配置优化 - 优化打包体积,提高打包速度

随着项目越来越大&#xff0c;打包后的体积很大&#xff0c;打包时间也很长&#xff0c;部署一次基本上要等十分钟左右。那么如何来优化打包体积和提高打包速度呢&#xff1f;一起来看看吧&#xff5e; 优化前打包体积分析 优化前个模块体积&#xff1a; 通过脚本命令&#x…

年产2万吨山楂酒工厂的设计—原料前处理工段及车间的设计(lunwen+cad图纸)

目 录 1前 言 1 1.1设计背景及目的 1 1.1.1山楂酒的介绍及功效 1 1.1.2目标人群 1 1.1.3发展前景 2 1.2设计依据 2 1.3设计内容 2 1.4原材料的选择 3 2工艺流程设计 5 2.1工艺流程的确定 5 2.2分选 6 2.3清洁消毒 8 2.4去核 9 2.4.1去核机的介绍及选择 9 2.4.2山楂核的处理 10 …

MQ 概念介绍 / 配置以及原理 简书

文章目录 1、什么是MQ 2、MQ的多种产品 3、MQ的工作原理 4、ActiveMQ 的配置 5、ActiveMQ 的数据存储方式 6、ActiveMQ的主从服务 7、ActiveMQ的集群负载均衡 什么是MQ&#xff1f; Message Queue, 就是消息队列&#xff0c;MQ 经常会作为多系统当中的网络消息传输。是…

负载均衡式在线OJ判题系统

文章目录负载均衡式在线OJ1. 演示项目2. 所用技术及开发环境所用技术&#xff1a;开发环境3. 项目宏观设计I. leetcode结构II.宏观结构III.编写思路4. compiler服务1. 编译功能&#xff1a;2. 运行功能3. 编译并运行功能4. 打包成一个网络服务5. 基于MVC结构的oj服务设计1. 用户…

Java IO流(详解)

1. File1. 创建2. 操作1. 获取文件信息2. 目录创建/删除2. IO流1. FileInputStream1. 简单使用2. 读取中文2. FileOutputStream1. 简单使用2. 追加写入3. 文件拷贝4. FileReader1. 简单使用2. 提高读取速度5. FileWriter1. 简单使用6. 节点流和处理流简介7. BufferedReader1. 简…

产品开发需要考虑哪些场景

产品到项目中去&#xff0c;也从项目中来&#xff0c;也就是说产品开发后最终都是会到项目中历练&#xff0c;然后吸取项目中的优点&#xff0c;来补全产品中业务的不足、功能的不足&#xff0c;让产品更加完善&#xff0c;最终成为精品。 每个产品的形成都要多加考虑&#xf…

Github 用户查询案例【基于Vue2全局事件总线通信】

前言&#xff1a; 本次案例是一个基于 Vue2 的全局事件总线通信的仿 Github 用户搜索模块&#xff0c;使用的接口是 Github 官方提供的搜索接口&#xff1a; https://api.github.com/search/users?qxxx&#xff08;发送请求时需要将输入的用户名称绑定替换掉xxx&#xff09;&a…

HTML期末学生大作业-宠物之家网页作业html+css+javascript

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

仪表板支持水印设置,数据集新增脱敏规则支持,DataEase开源数据可视化分析平台v1.17.0发布

12月5日&#xff0c;DataEase开源数据可视化分析平台正式发布v1.17.0版本。 这一版本的功能升级包括&#xff1a;数据集方面&#xff0c;支持将数据集数据按指定条件导出为Excel文件&#xff0c;方便用户对权限范围内的数据进行二次处理。数据集字段支持日期解析格式设置&…

[附源码]计算机毕业设计网约车智能接单规划小程序Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Service层代码单元测试以及单元测试如何Mock

一、背景 接着上一篇文章&#xff1a;单元测试入门篇&#xff0c;本篇文章作为单元测试的进阶篇&#xff0c;主要介绍如何对Springboot Service层代码做单元测试&#xff0c;以及单元测试中涉及外调服务时&#xff0c;如何通过Mock完成测试。 二、Springboot Service层代码单…

[附源码]JAVA毕业设计快递物流管理(系统+LW)

[附源码]JAVA毕业设计快递物流管理&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

华为云低代码技术:让矿区管理“智变”,一览无遗

摘要&#xff1a;基于华为低代码平台&#xff0c;万洲嘉智复用开发了9个数字化管理功能&#xff0c;成功解决了矿区管理的空区和难点&#xff0c;帮助煤矿园区实现了智能化管控。本文分享自华为云社区《【云享伙伴】第10期&#xff1a;华为云低代码技术&#xff1a;让矿区管理“…

[附源码]JAVA毕业设计-旅游产品销售管理-演示录像2020(系统+LW)

[附源码]JAVA毕业设计-旅游产品销售管理-演示录像2020&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff…

660846-99-1, Ac-Arg-Gly-Lys-AMC

Control for the two step histone deacetylase assay with Ac-Arg-Gly-Lys(Ac)-AMC. Ac-RGK-AMC corresponds to the product of the deacetylase reaction, which is subsequently cleaved by trypsin. Ac-精氨酸- gly - lys (Ac)-AMC两步法组蛋白去乙酰化酶测定对照。Ac-RGK…

直击家居建材采购痛点,数商云采购协同系统招投标功能助力企业招采透明高效

在后疫情时代&#xff0c;各类企业的采购与供应链数字化转型已是大势所趋&#xff0c;家居建材企业也不例外。用数字化技术助力建材产业转型&#xff0c;为供采双方提供线上精准对接服务&#xff0c;才能赋能新时代建材供应链。 建设采购平台已是大势所趋。作为企业价值链管理…

[附源码]Python计算机毕业设计Django南通大学福利发放管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

UEditorPlus v2.7.0发布 开放独立文档,附件样式优化

UEditor是由百度开发的所见即所得的开源富文本编辑器&#xff0c;基于MIT开源协议&#xff0c;该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器&#xff0c;主要做了样式的定制&#xff0c;更符…

Hoops API参考: 3D Graphics System的Set_Color()函数

void Set_Color(const char* color_spec)渲染一个段的内容时改变使用的颜色。还可以用于选择要在高亮模式中使用的曲面特性&#xff0c;以及用于特殊纹理贴图效果。 具体细节 Set_Color(&#xff09;的通用目标是使用这个颜色进行绘制。你可以之只给颜色命令&#xff0c;也可…

警惕 有种过敏叫“牛奶蛋白过敏”

过敏是一个全球性的健康问题。以此为基础。WHO据统计&#xff0c;过敏已成为世界第六大疾病。世界上有3亿人患有哮喘、特应性皮炎、过敏性鼻炎、胃肠道疾病等疾病。美国每年有4%-6%的儿童患有食物过敏。由于环境和食品添加剂的日益复杂&#xff0c;中国和发达国家的过敏性疾病正…