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

时间:2018-05-27 03:27:12

标签: apache-flink flink-streaming

我在下面发表了一份声明:

  

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

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

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

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

1 个答案:

答案 0 :(得分:4)

一般来说你是对的。只有rebase才会将数据溢出到磁盘。

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

  • 如果FsStateBackend,检查点数据将被发送到JobManager并保存在内存中。

  • MemoryStateBackend在FileSystem中的检查点上存储数据,并仅向JobManager(或在元数据文件夹中的HA场景存储中)发送小元数据

因此,对于任何生产用例,都强烈鼓励FsStateBackend。您可以找到更详尽的信息here