概述
Flink在v1.12到v1.14的改进当中,其状态后端也发生了变化。老版本的状态后端有三个,分别是MemoryStateBackend、FsStateBackend、RocksDBStateBackend,在flink1.14中,这些状态已经被废弃了,新版本的状态后端是 HashMapStateBackend、EmbeddedRocksDBStateBackend。
1、检查点
有状态流应用中的检查点(checkpoint),其实就是所有任务的状态在某个时间点的一个快照(一份拷贝)。简单来讲,就是一次 存盘,让我们之前处理数据的进度不要丢掉。在一个流应用程序运行时,Flink会定期保存检查点,在检查点中会记录每个算子的id和状态,如果发生故障,Flink就会用最近一次成功保存的检查点来恢复应用的状态,重新启动处理流程,就如同 读档 一样。
2、状态后端
在 Flink 中,状态的存储、访问以及维护,都是由一个可插拔的组件决定的,这个组件就叫作状态后端(state backend)。状态后端主要负责两件事:一是本地的状态管理,二是将检查点(checkpoint)写入远程的持久化存储。
2.1、状态后端的分类
Flink 中提供了两类不同的状态后端,一种是“哈希表状态后端”(HashMapStateBackend),另一种是“内嵌 RocksDB 状态后端”(EmbeddedRocksDBStateBackend)。如果没有特别配置,系统默认的状态后端是HashMapStateBackend。
-
哈希表状态后端(HashMapStateBackend)
HashMapStateBackend 是将本地状态全部放入内存的,这样可以获得最快的读写速度,使计算性能达到最佳;代价则是内存的占用。它适用于具有大状态、长窗口、大键值状态的作业, 对所有高可用性设置也是有效的。
对于检查点的保存,一般是放在持久化的分布式文件系统(file system)中,也可以通过配置“检查点存储”(CheckpointStorage)来另外指定。
</

本文介绍了Flink状态后端的演变,从v1.12到v1.14,MemoryStateBackend、FsStateBackend、RocksDBStateBackend被弃用,新版本引入HashMapStateBackend和EmbeddedRocksDBStateBackend。检查点作为有状态流应用的关键,用于数据恢复。状态后端分为HashMap和RocksDB两类,前者将状态保留在内存,适合小状态,后者利用RocksDB提供磁盘存储,适合大状态。选择状态后端需权衡处理性能和应用扩展性。
最低0.47元/天 解锁文章
1347

被折叠的 条评论
为什么被折叠?



