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

Java Apache Flink中的默认检查点保存在哪里?,java,apache-flink,flink-streaming,checkpointing,Java,Apache Flink,Flink Streaming,Checkpointing,我是ApacheFlink的新手,我正在浏览ApacheFlink的示例。我发现,在出现故障的情况下,Flink能够从检查点恢复流处理 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.enableCheckpointing(10000L); 现在,我的问题是Flink默认在哪里保留检查点 感谢您的帮助 Flink的特点是对StateBackend的抽象。stat

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

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(10000L);
现在,我的问题是Flink默认在哪里保留检查点


感谢您的帮助

Flink的特点是对StateBackend的抽象。
statebend
负责本地管理工作节点上的状态,但也负责检查(并将状态恢复)到远程位置

默认的
statebend
MemoryStateBackend
。它维护workers(TaskManager)JVM堆上的状态,并将其检查点指向主机(JobManager)的JVM堆。因此,
MemoryStateBackend
不需要任何额外的配置或外部系统,有利于本地开发。但是,它显然不可扩展,不适合任何严重的工作负载


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

默认状态后端是MemoryStateBend。意味着它将飞行中的数据存储在任务管理器的JVM中,并在主堆(作业管理器)中检查它。这对本地调试很有好处,但若工作停止,您将失去检查点

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


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

感谢您的响应。但我的意思是——当我杀死Flink应用程序(示例中的任何一个)并重新启动它时,它能够从最后处理的消息中恢复。所以,当只有一个JVM启动,而它又关闭时,内存检查点是如何工作的?我想它必须在磁盘上保存一些东西。你指的是什么来源?如果使用Kafka,可能是由于提交给Kafka代理的偏移量,而不是由于正在写入检查点。@DawidWysakowicz是的,我指的是Kafka作为源。检查点还包括Kafka读取偏移量(Flink不依赖于Kafka自己的偏移量提交机制)。正如我所说,检查点存储在JobManager(主)堆上。如果该进程停止,检查点和所有状态都将丢失。因此,不建议在生产用例中使用默认配置,您应该配置其他两个状态后端之一。
env.setStateBackend(new FsStateBackend("file:///apps/flink/checkpoint"));