大数据—— Flink 状态后端(State Backends)

由于有效的状态访问对于处理数据的低延迟只管重要,因此每个并行任务都会在本地维护其状态,以确保快速的状态访问。

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

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

  • 本地的状态管理
  • 将检查点(checkpoint)状态写入远程存储

Flink 提供的状态后端:

  • MemoryStateBackend:内存级的状态后端,会将键控状态作为内存中的对象进行管理,将它们存储在 TaskManager 的 JVM 堆上,而将 checkpoint 存储在 JobManger 的内存中。(生产不用)
  • FsStateBackend:将 checkpoint 存到远程的持久化文件系统(FileSystem)上,面对于本地状态,跟 MemoryStateBackend 一样,也存到 TaskManger 的 JVM 堆上。
  • RockDBStateBackend:将所有状态序列化后,存入本地的 RockDB中存储。RockDB 是基于 KV的,可以看做是一个本地数据库(实际使用内存+磁盘)。checkpoint 存到远程的持久化文件系统(FileSystem)上。RockDB 是一个用于快速存储的可嵌入持久化键值存储。他通过 Java Native接口(JNI)与Flink进行交互。
状态后端特点场景
MemoryStateBackend快速、低延迟、但不稳定生产环境不用
FsStateBackend同时拥有内存级的本地访问速度和更好的容错保证,但还是会受到OOM影响分钟级窗口聚合、join
RockDBStateBackend超大状态的作业,对状态读写性能要求不高的作业天级窗口聚合

设置 StateBackend 的方式

1. 在配置文件中修改 flink-conf.yaml

jobmanager(即MemoryStateBackend)

filesystem(即FsStateBackend)

rocksdb(即RocksDBStateBackend)

state.backend:filesystem

state.checkpoints.dir:hdfs://namenode:9000/flink/checkpoints

2. 在代码中修改

//MemoryStateBackend
val env = StreamExecutionEnvironment.getExecutionEvironment
env.setStateBackend(new HashMapStateBackend)
env.getCheckpointConfig.setCheckpointStorage(new JobManagerCheckpointStorage)

//FsStateBackend
env.setStateBackend(new HashMapStateBackend)
env.getCheckpointConfig.setCheckpointStorage("hdfs://checkpoints")

//RockDBStateBackend
env.setStateBackend(new EmbeddedRocksDBStateBackend)
env.getCheckpointConfig.setCheckpointStorage("hdfs://checkpoints")

如果设置的是RockDBStateBackend,需要先引入依赖

<dependency> 
    <groupId>org.apache.flink</groupId> 
    <artifactId>flink-statebackend-rocksdb_2.12</artifactId> 
    <version>${flink.version}</version> 
</dependency>

RockDBStateBa 将正在运行中的状态数据保存在 RocksDB 数据库中,RocksDB 数据库默认将数据存储在 TaskManger 的数据目录。

运行中的状态首先写入堆外/本机内存,然后当达到配置的阈值时刷新到本地磁盘。这意味着 RocksDBStateBendback 可以支持大于总配置堆容量的状态,或者说其状态大小只受限于整个集群中的可用磁盘空间。另外,因为 RockSDBStateBendback 不使用 JVM 堆来存储运行中的状态,故也不受 JVM 垃圾回收的影响,具有可预测的延迟。

Checkpoint 时,整个RocksDB 数据库 被 checkpoint 到配置的文件系统目录中。少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其存储到 Checkpoint 的元数据文件中)。

除了完整的、自包含的状态快照之外,RocksDBStateBackend 还支持作为性能调优选项的增量 checkpoint。增量 checkpoint 仅存储上次checkpoint之后发生的改变。与执行完整快照相比,这大大减少了checkpoint的时间。Rock是DBStateBendback 是当前唯一支持增量 checkpoint 的状态后端。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Vicky_Tang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值