Flink状态后端
在前文中我们讲述了Flink的状态管理以及状态编程。所举的例子中,State都是基于内存存储的。实际生产中,如果状态一直都保存在内存,那么系统宕机或其它问题引起的系统重启时,状态数据就会丢失,无法知晓数据处理的进度。因此需要一种类似"定时存盘"的机制来保证数据流处理过程中的容错性。在Flink中,状态的存储、访问以及维护都是由称之为状态后端(state backends)的组件决定。当需要对某个State做Checkpoint时,就需要指定具体的状态后端来告诉Flink状态的存储方式和存储位置。State Backends管理着本地状态以及checkpoint(检查点)状态写入远端存储。Checkpoint可以认为是某段时间state的一个全局快照。
说白了,状态后端就是Flink中自动管理状态时存储状态值的地方。Flink中主要支持3种状态后端。
1)基于内存的MemoryStateBackend
将state数据作为内存中的对象进行管理,存储在TaskManager的JVM堆上。将checkpoint数据存储在JobManager的内存中。
这种方式单个State大小默认不能超过5M,总的State数据和checkpoint数据大小不能超过JobManager的内存大小。这是默认的状态后端管理器。适用