如果state的大小大于flink内存的大小怎么办?



我想知道状态的大小大于flink的内存大小。由于状态是由Flink App的api通过在代码级别定义MapState<K,V>来控制的,因此状态可以存储大尺寸的值(超过内存大小,如100Gb,200Gb)。

这可能吗?

您可能有兴趣阅读State后端

HashMapStateBackend内部保存数据作为Java堆上的对象

HashMapStateBackend将OOM你的任务管理器,如果你的MapState太大。

EmbeddedRocksDBStateBackend将运行中的数据保存在RocksDB数据库中,该数据库(默认情况下)存储在TaskManager本地数据目录

[…请注意,您可以保留的状态数量仅受可用磁盘空间的限制。与将状态保存在内存中的HashMapStateBackend相比,这允许保存非常大的状态。然而,这也意味着使用此状态后端可以实现的最大吞吐量将更低。所有从/到此后端的读/写都必须通过反/序列化来检索/存储状态对象,这也比始终使用堆上表示(如基于堆的后端所做的那样)更昂贵。

EmbeddedRocksDBStateBackend将使用磁盘,因此您有更多的容量。请注意,它比较慢,但缓存可以帮助缓解一些慢;我建议你看看这个配置(在Flink中使用RocksDB的机制)

相关内容

最新更新