我是新来的flink和我有一些混乱的状态后端配置。
据我所知,rocksdb将应用程序的所有状态保存在文件系统中。我使用s3来存储状态,所以我将state.checkpoints.dir和state.savepoints.dir都配置为指向我的s3存储桶。现在我看到了另一个与rocksdb存储相关的选项state.backend.rocksdb.localdir。这样做的目的是什么?(我知道我不能用s3来做这个)另外,如果rocksdb使用本地机器存储来做某事,当我使用kubernetes时,我的pod突然失败了,会是什么情况?我应该使用持久存储吗?
另一件事,我不确定我是否正确地理解了所有国家的事情。检查点保存了我所有的状态吗?例如,当我使用aggregationfunction而应用程序失败时,当应用程序还原时,是否还原每个键的聚合值?
1条答案
按热度按时间4smxwvx51#
flink的每个状态后端都将其工作状态保持在每个工人的某个本地位置,同时将检查点保持在某个持久的位置,如s3。对于基于堆的状态后端,工作状态存储为jvm堆上的对象,而对于rocksdb,工作状态存储为本地磁盘上的序列化字节(具有内存内、堆外缓存)。出于性能方面的原因,您不想使用s3(甚至网络连接存储)来
state.backend.rocksdb.localdir
. 如果可以,请使用本地ssd存储。是的,如果应用程序失败,aggregationfunction中每个键的聚合值都将恢复。检查点包括一切,包括源和接收器、窗口、计时器、processfunctions、richfunctions等保持的状态。