我是 Apache Flink 的新手,我正在浏览 Apache Flink 的示例。我发现如果发生故障,Flink 能够从检查点恢复流处理。
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(10000L);
现在,我的问题是 Flink 默认将检查点保存在哪里?
任何帮助表示赞赏!
我是 Apache Flink 的新手,我正在浏览 Apache Flink 的示例。我发现如果发生故障,Flink 能够从检查点恢复流处理。
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(10000L);
现在,我的问题是 Flink 默认将检查点保存在哪里?
任何帮助表示赞赏!
Flink 具有对 StateBackends 的抽象。AStateBackend
负责本地管理工作节点上的状态,还负责将状态检查点(并恢复)到远程位置。
默认StateBackend
值为MemoryStateBackend
. 它维护工作人员(TaskManagers')JVM 堆上的状态,并将其检查点到主设备(JobManager)的 JVM 堆。因此,MemoryStateBackend
它不需要任何额外的配置或外部系统,有利于本地开发。但是,它显然不可扩展且适合任何严重的工作负载。
Flink 还提供了一个FSStateBackend
,它也在工作人员的 JVM 堆上保存本地状态,并将其检查点到远程文件系统(HDFS,NFS,...)。最后,还有RocksDBStateBackend
,它将状态存储在嵌入式基于磁盘的键值存储 (RocksDB) 中,并且还检查点到远程文件系统(HDFS、NFS、...)。
默认状态后端是 MemoryStateBackend。意味着它将飞行中的数据存储在任务管理器的 JVM 中,并将其检查点在主堆(作业管理器)中。它有利于本地调试,但如果工作失败,您将失去检查点。
通常用于生产使用带有外部文件系统(HDFS、S3 等)路径的 FsStateBackend。它将飞行数据存储在任务管理器的 JVM 中,并将其检查点到外部文件系统。
喜欢
env.setStateBackend(new FsStateBackend("file:///apps/flink/checkpoint"));
可选地,还可以配置一个小的元文件指向状态存储以实现高可用性。