我在下面发表了一份声明:
“根据您的状态后端,Flink还可以管理应用程序的状态,这意味着Flink处理内存管理(如果需要可能会溢出到磁盘),以允许应用程序保持非常大的状态。”
https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/state/state_backends.html
这是否意味着只有当状态后端配置为RocksDBStateBackend
时,状态才会保留在内存中并在必要时可能会溢出到磁盘?
但是,如果配置为MemoryStateBackend
或FsStateBackend
,则状态仅保留在内存中,并且永远不会溢出到磁盘。
答案 0 :(得分:4)
一般来说你是对的。只有rebase
才会将数据溢出到磁盘。
在RocksDBStateBackend
和MemoryStateBackend
的情况下,状态始终保存在TaskManagers内存中,因此必须适合其中。这两个后端之间的区别在于它们检查点数据的方式。
如果FsStateBackend
,检查点数据将被发送到JobManager并保存在内存中。
MemoryStateBackend
在FileSystem中的检查点上存储数据,并仅向JobManager(或在元数据文件夹中的HA场景存储中)发送小元数据
因此,对于任何生产用例,都强烈鼓励FsStateBackend
。您可以找到更详尽的信息here。