【Flink】状态后端(1.13版本及大于1.13版本适用)

本文介绍了Flink在1.13版本及其后续版本中状态后端的变化,主要涵盖HashMapStateBackend和EmbeddedRocksDBStateBackend。HashMapStateBackend提供内存和文件系统两种存储方式,适用于不同场景,而EmbeddedRocksDBStateBackend利用RocksDB存储大量状态数据,适合生产环境。文章还提供了配置这两种状态后端的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flink为什么越来越受欢迎,在大数据领域计算容错很重要,Flink计算容错手段之一就是checkpoint机制,会把数据保存在CheckPoint中,数据会随着 CheckPoint 而持久化,以防止数据丢失、保障恢复时的一致性,那么CheckPoint到底保存在哪里呢?答案是状态后端中。

1.13版本及1.13版本后的新版本Flink状态后端发生一些改变

新版本的Flink状态后端为如下2种

  • HashMapStateBackend
  • EmbeddedRocksDBStateBackend

 HashMapStateBackend:(数据以 Java 对象的形式存储在堆中。 Key/value 形式的状态和窗口算子会持有一个 hash table,其中存储着状态值、触发器。适用于有较大 state,较长 window 和较大 key/value 状态的 Job)

(1)HashMapStateBackend之只放内存,等同于前面版本的MemoryStateBackend,这种情况适用于开发时使用,使用方式

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStateBackend(new HashMapStateBackend());
env.getCheckpointConfig().setCheckp

升级 Apache Flink1.13 到 2.0.0 是一个重要的版本更新,涉及许多新特性、API 变化以及潜在的不兼容性。以下是升级的主要步骤和注意事项: ### 升级步骤 1. **备份现有环境和配置文件** 在升级之前,确保对当前 Flink 集群的配置、作业 JAR 包和状态快照进行完整备份。这包括 `flink-conf.yaml`、`log4j.properties` 等核心配置文件,以及用户自定义的配置。 2. **检查 Flink 2.0.0 的兼容性要求** - Flink 2.0.0 引入了模块化架构,许多核心组件(如状态后端、检查点机制)被重构为插件化模块。 - 检查当前作业是否依赖已移除或重构的 API,例如 `CheckpointedFunction`、`CheckpointListener` 接口的变更。 - 确保使用的状态后端Flink 2.0 兼容,例如 RocksDB 状态后端版本是否适配。 3. **更新依赖库和插件** - 更新所有第三方连接器(如 Kafka、Hive、JDBC)到与 Flink 2.0.0 兼容的版本。 - 使用新的 `flink-dist` 包和插件目录结构,确保所有依赖 JAR 包放置在 `plugins/` 目录下。 4. **迁移配置文件** - Flink 2.0 的配置项结构可能发生变化,例如 `state.backend` 已被替换为 `state.backend.type`。 - 检查 `high-availability.storageDir`、`state.checkpoints.dir` 和 `state.savepoints.dir` 是否正确指向新的存储路径。 5. **测试作业在新版本下的行为** - 在测试环境中部署并运行原有作业,验证其行为是否与 Flink 1.13 一致。 - 使用 Savepoint 进行状态迁移测试,确保从 Flink 1.13 的 Savepoint 能够在 Flink 2.0 中恢复。 6. **升级集群并滚动重启** - 使用滚动升级策略逐步替换 Flink 1.13 的二进制文件为 2.0.0 版本。 - 确保 ZooKeeper 或 Kubernetes 等高可用组件配置正确。 ### 注意事项 - **API 变化**:Flink 2.0 引入了许多 API 的变化,尤其是状态管理、窗口操作和连接器接口,需检查用户代码是否受到影响。 - **状态兼容性**:Flink 2.0 的状态序列化机制有所改进,建议在升级前进行 Savepoint 并测试状态恢复。 - **模块化架构**:Flink 2.0 的模块化设计要求用户将特定功能的插件放入 `plugins/` 目录,否则可能导致运行时错误。 - **依赖冲突**:升级后需检查用户作业 JAR 包与 Flink 2.0 的依赖是否冲突,特别是 Guava、Netty 等库。 - **性能调优**:Flink 2.0 的新特性(如动态资源管理、新的调度器)可能需要重新调优作业性能参数。 ### 示例:检查状态后端配置变化 ```yaml # Flink 1.13 的状态后端配置 state.backend: filesystem state.checkpoints.dir: file:///checkpoints/ state.savepoints.dir: file:///savepoints/ # Flink 2.0 的状态后端配置 state.backend.type: filesystem state.checkpoints.dir: file:///checkpoints/ state.savepoints.dir: file:///savepoints/ ``` ### 示例:使用 Savepoint 进行状态迁移 ```bash # 在 Flink 1.13 中触发 Savepoint bin/flink savepoint <jobId> file:///savepoints/ # 在 Flink 2.0 中从 Savepoint 恢复 bin/flink run -s file:///savepoints/savepoint-<hash> -d job.jar ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯咖啡半杯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值