Flink之状态后端(StateBackends)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 每传入一条数据,有状态的算子任务都会 读取和更新状态 。由于有效的状态访问对于处 理数据的低延迟至关重要,因此每个并行任务(子任务)都会在本地维护其状态,以确保快速 的状态访问。

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

状态的存储、访问以及维护,由一个 可插入 的组件决定,这个组件就叫做 状态后端 (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轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
存储 IDE Java
Flink---12、状态后端(HashMapStateBackend/RocksDB)、如何选择正确的状态后端
Flink---12、状态后端(HashMapStateBackend/RocksDB)、如何选择正确的状态后端
|
5月前
|
消息中间件 监控 Kafka
联通实时计算平台问题之Flink状态后端数据量较大时,问题排查要如何进行
联通实时计算平台问题之Flink状态后端数据量较大时,问题排查要如何进行
|
6月前
|
存储 SQL Java
实时计算 Flink版产品使用问题之使用状态后端存储和恢复作业的状态时,如何配置状态后端
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
存储 缓存 安全
eBay:Flink的状态原理讲一下……
eBay:Flink的状态原理讲一下……
231 0
eBay:Flink的状态原理讲一下……
|
存储 流计算
|
存储 Java 数据库
flink 状态后端详解
flink 状态后端详解
flink 状态后端详解
|
4月前
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。
|
2月前
|
存储 分布式计算 流计算
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
本文介绍了阿里云开源大数据团队在实时计算领域的最新成果——向量化流计算引擎Flash。文章主要内容包括:Apache Flink 成为业界流计算标准、Flash 核心技术解读、性能测试数据以及在阿里巴巴集团的落地效果。Flash 是一款完全兼容 Apache Flink 的新一代流计算引擎,通过向量化技术和 C++ 实现,大幅提升了性能和成本效益。
1376 73
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
|
4天前
|
存储 关系型数据库 BI
实时计算UniFlow:Flink+Paimon构建流批一体实时湖仓
实时计算架构中,传统湖仓架构在数据流量管控和应用场景支持上表现良好,但在实际运营中常忽略细节,导致新问题。为解决这些问题,提出了流批一体的实时计算湖仓架构——UniFlow。该架构通过统一的流批计算引擎、存储格式(如Paimon)和Flink CDC工具,简化开发流程,降低成本,并确保数据一致性和实时性。UniFlow还引入了Flink Materialized Table,实现了声明式ETL,优化了调度和执行模式,使用户能灵活调整新鲜度与成本。最终,UniFlow不仅提高了开发和运维效率,还提供了更实时的数据支持,满足业务决策需求。
zdl
|
2月前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
170 56

热门文章

最新文章