Flink中State管理与恢复之状态后端Backend

网友投稿 335 2022-11-17

Flink中State管理与恢复之状态后端Backend

1.保存机制 StateBackend(状态后端)

默认情况下,State 会保存在 TaskManager 的内存中,CheckPoint 会存储在 JobManager 的内存中。State 和 CheckPoint 的存储位置取决于 StateBackend 的配置。Flink 一共提供 了 3 种 StateBackend 。 包 括 基 于 内 存 的 MemoryStateBackend 、 基 于 文 件 系 统 的 FsStateBackend,以及基于 RockDB 作为存储介质的 RocksDBState-Backend。

2.MemoryStateBackend

基于内存的状态管理具有非常快速和高效的特点,但也具有非常多的限制,最主要的就 是内存的容量限制,一旦存储的状态数据过多就会导致系统内存溢出等问题,从而影响整个 应用的正常运行。同时如果机器出现问题,整个主机内存中的状态数据都会丢失,进而无法 恢复任务中的状态数据。因此从数据安全的角度建议用户尽可能地避免在生产环境中使用 MemoryStateBackend。

streamEnv.setStateBackend(new MemoryStateBackend(10*1024*1024))

3.FsStateBackend

和 MemoryStateBackend 有所不同,FsStateBackend 是基于文件系统的一种状态管理器, 这里的文件系统可以是本地文件系统,也可以是 HDFS 分布式文件系统。FsStateBackend 更 适合任务状态非常大的情况,例如应用中含有时间范围非常长的窗口计算,或 Key/value State 状态数据量非常大的场景。

streamEnv.setStateBackend(new FsStateBackend("hdfs://mycluster/checkpoint/cp1"))

4.RocksDBStateBackend

RocksDBStateBackend 是 Flink 中内置的第三方状态管理器,和前面的状态管理器不同, RocksDBStateBackend 需要单独引入相关的依赖包到工程中。

org.apache.flink flink-statebackend-rocksdb_2.11 1.9.1

RocksDBStateBackend 采用异步的方式进行状态数据的 Snapshot,任务中的状态数据首 先被写入本地 RockDB 中,这样在 RockDB 仅会存储正在进行计算的热数据,而需要进行 CheckPoint 的时候,会把本地的数据直接复制到远端的 FileSystem 中。与 FsStateBackend 相比,RocksDBStateBackend 在性能上要比 FsStateBackend 高一些, 主要是因为借助于 RocksDB 在本地存储了最新热数据,然后通过异步的方式再同步到文件系 统中,但 RocksDBStateBackend 和 MemoryStateBackend 相比性能就会较弱一些。RocksDB 克服了 State 受内存限制的缺点,同时又能够持久化到远端文件系统中,推荐在生产中使用。

streamEnv.setStateBackend( new RocksDBStateBackend ("hdfs://mycluster/checkpoint/cp2"))

5.全局配置 StateBackend

以上的代码都是单 job 配置状态后端,也可以全局配置状态后端,需要修改 flink-conf.yaml 配置文件:

state.backend: filesystem

filesystem 表示使用 FsStateBackendjobmanager 表示使用 MemoryStateBackend rocksdb 表示使用 RocksDBStateBackend。

state.checkpoints.dir: hdfs://mycluster/checkpoints

默认情况下,如果设置了 CheckPoint 选项,则 Flink 只保留最近成功生成的 1 个 CheckPoint,而当 Flink 程序失败时,可以通过最近的 CheckPoint 来进行恢复。但是,如 果希望保留多个 CheckPoint,并能够根据实际需要选择其中一个进行恢复,就会更加灵活。 添加如下配置,指定最多可以保存的 CheckPoint 的个数。

state.checkpoints.num-retained: 2

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Flink中State管理与恢复之状态后端Backend案例
下一篇:创基Type-C分线器散热快性能更稳定
相关文章

 发表评论

暂时没有评论,来抢沙发吧~