![3f1c845fce931338b75f8a20d4834242.png](https://i-blog.csdnimg.cn/blog_migrate/f5914634597c3dd9137e604d0075e003.png)
十万个为什么
state、checkpoint、savepoint 之间有什么关系
在Flink1.11 中对状态相关的优化有哪些
state、checkpoint 、savepoint 存在的意义是什么
checkpoint 如何触发、如何设置
savepoint和checkpoint的关系
![5ccbff364a3a58bcc3aed48271fa8094.png](https://i-blog.csdnimg.cn/blog_migrate/4b20581a12d381b10af4ec885fcd6729.png)
State
![d5967909a6da63ed81fe1cd94e3ef747.png](https://i-blog.csdnimg.cn/blog_migrate/5d09547cf6da8a20c80d77e5510cadb2.png)
1、定义:
与时间相关的任务内部数据的快照
2、作用:
每次计算需要基于上一次计算的结果,故通过state将每次计算的中间结果进行持久化
出现错误需要从成功的检查点进行State的恢复
增量计算,Failover这些机制都需要state的支撑。
![5ccbff364a3a58bcc3aed48271fa8094.png](https://i-blog.csdnimg.cn/blog_migrate/4b20581a12d381b10af4ec885fcd6729.png)
State Backends
![d5967909a6da63ed81fe1cd94e3ef747.png](https://i-blog.csdnimg.cn/blog_migrate/5d09547cf6da8a20c80d77e5510cadb2.png)
1、作用:
决定状态的存储格式以及状态在CheckPoint时持久化格式和方式
2、分类:
(1)MemoryStateBackend【全量快照】:
以Java对象的形式存储在堆上
适用于开发调试
(2)FsStateBackend【全量快照】:
需配置 URL("hdfs://md:4010/checkpoints" 或 "file:///checkpoints")
正在运行中的状态数据保存在 TaskManager 的内存中,故受制于GC
CheckPoint 时,将状态快照写入到配置的文件系统目录中。
少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其写入到 CheckPoint 的元数据文件中)
异步快照可防止 CheckPoint 写状态时对数据处理造成阻塞。异步快照默认是开启的
new FsStateBackend(path, false); //可通过编码关闭
FsStateBackend 适用场景:状态较大、窗口较长的 Job和 所有高可用的场景。
(3)RocksDBStateBackend【全量/异步快照】:
a、原理:
需配置 URL("hdfs://md:4010/checkpoints" 或 "file:///checkpoints")
正在运行中的状态数据保存在 RocksDB中,RocksDB默认将数据存储在 TaskManager 的数据目录,故RocksDB 的状态量仅受本地磁盘大小的限制。CheckPoint 时,整个 RocksDB被 checkpoint 到配置的文件系统目录中。少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其存储到 CheckPoint