Apache flink 状态保存在TaskManager';内存的状态与后端无关?

Apache flink 状态保存在TaskManager';内存的状态与后端无关?,apache-flink,Apache Flink,我知道我可以在flink的配置文件(flink-conf.yaml)中全局设置状态后端 或在每个作业范围中设置 val env = StreamExecutionEnvironment.getExecutionEnvironment() env.setStateBackend(new FsStateBackend("hdfs://namenode:40010/flink/checkpoints")) 我有一个问题: flink作业继续运行时,属于TasManager的状态数

我知道我可以在flink的配置文件(flink-conf.yaml)中全局设置状态后端 或在每个作业范围中设置

val env = StreamExecutionEnvironment.getExecutionEnvironment()
env.setStateBackend(new FsStateBackend("hdfs://namenode:40010/flink/checkpoints"))
我有一个问题:

flink作业继续运行时,属于TasManager的状态数据保存在
TaskManager
中的何处?我的意思是,当完成一个检查点时,检查点数据将保存在HDFS(chk XXX)或RocksDB中,但当flink作业继续运行时,taskManager将积累越来越多属于此任务管理器的状态,它们是否始终保存在内存中

如果它们保存在内存中,那么检查点数据不能太大,否则可能会发生OOM


我可以在TaskManager进程中使用RocksDB保存TM的状态数据吗?谢谢

使用fsstatebend,每个任务管理器的工作状态都在内存中(在JVM堆上),状态备份(检查点)进入分布式文件系统,例如HDFS

使用RockSDBStateBend,每个任务管理器的工作状态都在本地RocksDB实例中,即在本地磁盘上,状态备份(检查点)再次转到分布式文件系统,例如HDFS

Flink从不在RocksDB中存储检查点数据。这不是它扮演的角色。RocksDB用作短暂的嵌入式数据存储,其内容可能在任务管理器出现故障时丢失。这是将工作状态保留在内存中的替代方法(任务管理器出现故障时,工作状态也可能丢失)