Apache Flink 中保存的默认检查点在哪里?

Where is the default checkpoint(s) kept in Apache Flink?

我是 Apache Flink 的新手,我正在浏览 Apache Flink 的示例。我发现在发生故障的情况下,Flink 能够从检查点恢复流处理。

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(10000L);

现在,我的问题是 Flink 默认将检查点保存在哪里?

感谢任何帮助!

Flink 对StateBackends 进行了抽象。 StateBackend 负责在本地管理工作节点上的状态,但也负责将状态检查点(和恢复)到远程位置。

默认的StateBackendMemoryStateBackend。它维护工作人员(TaskManager)的 JVM 堆上的状态,并将其检查点指向主服务器(JobManager)的 JVM 堆。因此 MemoryStateBackend 不需要任何额外的配置或外部系统,非常适合本地开发。但是,它显然不可扩展,不适合任何繁重的工作负载。

Flink 还提供了一个 FSStateBackend,它在 worker 的 JVM 堆上保存本地状态,并将其检查点到远程文件系统(HDFS、NFS 等)。最后,还有 RocksDBStateBackend,它将状态存储在基于嵌入式磁盘的键值存储 (RocksDB) 中,并将检查点存储到远程文件系统(HDFS、NFS 等)。

默认状态后端是 MemoryStateBackend。意味着它将飞行中的数据存储在任务管理器的 JVM 中,并将其检查点放在主机(作业管理器)的堆中。它对本地调试很有用,但如果工作失败,您将失去检查点。

通常在生产环境中使用带有外部文件系统(HDFS、S3 等)路径的 FsStateBackend。它将飞行数据存储在任务管理器的 JVM 中,并将其检查点到外部文件系统。

喜欢

env.setStateBackend(new FsStateBackend("file:///apps/flink/checkpoint"));

可选地,还可以配置一个小元文件指向状态存储以实现高可用性。