Flink之状态后端(StateBackends)

简介: 每传入一条数据,有状态的算子任务都会 读取和更新状态 。由于有效的状态访问对于处 理数据的低延迟至关重要,因此每个并行任务(子任务)都会在本地维护其状态,以确保快速 的状态访问。

每传入一条数据,有状态的算子任务都会 读取和更新状态 。由于有效的状态访问对于处 理数据的低延迟至关重要,因此每个并行任务(子任务)都会在本地维护其状态,以确保快速 的状态访问。

状态的存储、访问以及维护,由一个 可插入 的组件决定,这个组件就叫做 状态后端 (state backend)


状态后端主要负责两件事:


本地的状态管理

将检查点(checkpoint)状态写入远程存储

29.png



(1)状态后端的分类


状态后端作为一个可插入的组件, 没有固定的配置, 我们可以根据需要选择一个合适 的状态后端。


Flink 提供了 3 中状态后端:


MemoryStateBackend


内存级别的状态后端


构造方法

env.setStateBackend(new MemoryStateBackend( "file://"+ 
baseCheckpointPath, null).configure(conf, classLoader))

数据存储

State 数据存储在TaskManager 内存中

Checkpoint 数据数据存储在jobManager 内存

容量限制

单词State maxStateSize默认为5M

maxStateSize <= akka.framesize默认10M

总大小不能超过JobMananger的内存

默认后端状态管理器

推荐场景:

本地测试

状态比较少的作业

不推荐生产环境中使用

特点:快速, 低延迟, 但不稳定

FsStateBackend


构造方法

env.setStateBackend(new FsStateBackend(tmpPath))

数据存储:

状态数据:TaskManager 内存

Checkpoint:外部文件系统(本地或HDFS)

容量限制:

单个TaskManager上State总量不能超过TM内存

总数据大小不超过文件系统容量

推荐场景:

常规状态作业

窗口时间比较长,如分钟级别窗口聚合,Join等

需要开启HA的作业

可在生产环境中使用

特点:拥有内存级别的本地访问速度, 和更好的容错保证

RocksDBStateBackend


将所有的状态序列化之后, 存入本地的 RocksDB 数据库中.(一种 NoSql 数 据库, KV 形式存储)


创建方法

env.setStateBackend(new RocksDBStateBackend("file://"+
 basecheckpointPath).configure(conf,classLoader))

数据存储

State: TaskManager 中的KV数据库(实际使用内存+磁盘)

Checkpoint:外部文件系统(本地或HDFS)

容量限制:

单TaskManager 上 State总量不超过其内存+磁盘大小

单 Key最大容量2G

总大小不超过配置的文件系统容量

推荐场景:

超大状态作业

需要开启HA的作业

对状态读写性能要求不高的作业

生产环境可用


(2)配置状态后端


全局配置状态后端


在 flink-conf.yaml 文件中设置默认的全局后端

30.png

在代码中配置状态后端

可以在代码中单独为这个 Job 设置状态后端.

env.setStateBackend(new MemoryStateBackend());
env.setStateBackend(new FsStateBackend("hdfs://hadoop102:8020/flink/checkpoints/fs"));

如何要使用 RocksDBBackend, 需要先引入依赖:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-statebackend-rocksdb_${scala.binary.version}</artifactId>
  <version>${flink.version}</version>
  <scope>provided</scope>
</dependency>
env.setStateBackend(newRocksDBStateBackend("hdfs://hadoop102:8020/flink/checkpoints/rocksdb"));





相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
消息中间件 监控 Kafka
联通实时计算平台问题之Flink状态后端数据量较大时,问题排查要如何进行
联通实时计算平台问题之Flink状态后端数据量较大时,问题排查要如何进行
213 1
|
存储 SQL Java
实时计算 Flink版产品使用问题之使用状态后端存储和恢复作业的状态时,如何配置状态后端
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
存储 IDE Java
Flink---12、状态后端(HashMapStateBackend/RocksDB)、如何选择正确的状态后端
Flink---12、状态后端(HashMapStateBackend/RocksDB)、如何选择正确的状态后端
|
存储 缓存 安全
eBay:Flink的状态原理讲一下……
eBay:Flink的状态原理讲一下……
449 0
eBay:Flink的状态原理讲一下……
|
存储 流计算
|
存储 Java 数据库
flink 状态后端详解
flink 状态后端详解
flink 状态后端详解
|
9月前
|
人工智能 Java API
后端开发必看:零代码实现存量服务改造成MCP服务
本文介绍如何通过 **Nacos** 和 **Higress** 实现存量 Spring Boot 服务的零代码改造,使其支持 MCP 协议,供 AI Agent 调用。全程无需修改业务代码,仅通过配置完成服务注册、协议转换与工具映射,显著降低改造成本,提升服务的可集成性与智能化能力。
2617 1
|
9月前
|
前端开发 Java 数据库连接
后端开发中的错误处理实践:原则与实战
在后端开发中,错误处理是保障系统稳定性的关键。本文介绍了错误分类、响应设计、统一处理机制及日志追踪等实践方法,帮助开发者提升系统的可维护性与排障效率,做到防患于未然。
|
11月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
578 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
前端开发 JavaScript 关系型数据库
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
850 5
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡

热门文章

最新文章