2

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

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

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

任何帮助表示赞赏!

4

2 回答 2

5

Flink 具有对 StateBackends 的抽象。AStateBackend负责本地管理工作节点上的状态,还负责将状态检查点(并恢复)到远程位置。

默认StateBackend值为MemoryStateBackend. 它维护工作人员(TaskManagers')JVM 堆上的状态,并将其检查点到主设备(JobManager)的 JVM 堆。因此,MemoryStateBackend它不需要任何额外的配置或外部系统,有利于本地开发。但是,它显然不可扩展且适合任何严重的工作负载。

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

于 2018-05-14T10:37:43.813 回答
1

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

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

喜欢

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

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

于 2018-06-04T10:11:40.280 回答