知识卡片

Flink三种状态后端的取舍

专业/工作 · 501.a

内容

状态后端负责把状态检查点写入远程持久存储,Flink内置三种:MemoryStateBackend把状态以Java对象形式存在堆内存中,默认单个状态大小限制5MB,只适合本地开发调试;FsStateBackend把状态存在TaskManager内存中,检查点触发时才写入配置的文件系统,适合状态较大或窗口较长的作业;RocksDBStateBackend把状态直接存进本地RocksDB数据库,只支持异步快照,是唯一支持增量检查点的后端,状态大小仅受磁盘空间限制。三者的取舍本质是”访问速度”与”容量上限”的权衡:纯内存最快但容量小且不适合生产,RocksDB容量大但多了一层数据库读写开销,中间的FsStateBackend是折中方案。选型时要先估算作业状态规模,而不是默认用哪个。状态后端存储的具体是哪种状态,见[[Keyed State与Operator State的本质区别]]。

参考来源

《Flink入门与实战》第2章《定义、架构与原理》