State backend(Checkpoint 的存储的位置)

Checkpoint 的存储的位置取决于配置的 State backend(JobManager 内存,文件系统,数据库…)。
默认情况下,State 存储在 TaskManager 内存中,Checkpoint 存储在 JobManager 内存中。Flink 支持在其他 state backend 中存储 State 和 Checkpoint。可以通过如下方法配置:StreamExecutionEnvironment.setStateBackend(…)
Flink 提供了不同的 State backend,支持不同的 State 存储方式和位置。
默认会使用配置文件 flink-conf.yaml 指定的选项,也可以在每个作业中设置来覆盖默认选项
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStateBackend(…);
Flink 自带了以下几种开箱即用的 state backend:
MemoryStateBackend
FsStateBackend
RocksDBStateBackend
在没有配置的情况下,系统默认使用 MemoryStateBackend。
State backend(Checkpoint 的存储的位置)

尽管有checkpoint保证exactly-once,但对于实时性要求高的业务场景,每次重启所消耗的时间都可能会导致业务不可用。也许你也经常遇到这样的情况,checkpoint又失败了?连续失败?task manager 内存爆了? 这些情况都很容易导致Flink任务down了,这时候需要思考下你所处的业务场景下,选用的Flink State Backends是否合理?
三种状态后端的介绍:
MemoryStateBackend 默认,小状态,本地调试使用
FsStateBackend 大状态,长窗口,高可用场景
RocksDBStateBackend 超大状态,长窗口,高可用场景,可增量checkpoint