Apache Flink:状态后端在哪里保存状态?

YuF*_*hen 1 apache-flink flink-streaming

我在下面得到了一个声明:

“根据您的状态后端,Flink 还可以管理应用程序的状态,这意味着 Flink 处理内存管理(如有必要,可能会溢出到磁盘)以允许应用程序保持非常大的状态。”

https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/state/state_backends.html

这是否意味着只有当状态后端配置为 时RocksDBStateBackend,状态才会保留在内存中并可能在必要时溢出到磁盘?

但是,如果配置为MemoryStateBackendFsStateBackend,则状态仅保留在内存中,永远不会溢出到磁盘。

Daw*_*icz 5

是的,总的来说你是对的。只有RocksDBStateBackend这样才会有数据溢出到磁盘。

在这两种情况下MemoryStateBackendFsStateBackend状态始终保持在TaskManagers内存中,因此必须适合在那里。这两个后端之间的区别在于它们检查点数据的方式。

  • 如果MemoryStateBackend检查点数据被发送到 JobManager 并保存在那里的内存中。

  • FsStateBackend在文件系统的检查点时存储数据并且(在元数据文件夹中或高可用性方案存储)只发送小的元数据以JobManager

因此,对于任何生产用例,RocksDBStateBackend都非常鼓励这样做。您可以在此处找到更深入的信息。