开发者社区> 问答> 正文

使用RocksDBStateBackend时,为了防止state状态过大导致资源不够用怎么办?

在使用RocksDBStateBackend时,为了防止state状态过大导致资源不够用(磁盘),采用了state.backend.rocksdb.ttl.compaction.filter.enabled配置,使得每次rocksdb每次进行compact时候判断状态的ttl时间,然后删除过期的state,https://github.com/facebook/rocksdb/wiki/Time-to-Live 里面也有说明,但是有没有这种情况,rocksdb每次compact时候,有些状态并没有compact到,那这个时候已经过期的state就不会被删除。而且flink中的ttl刷新策略只有OnCreateAndWrite和OnReadAndWrite,没有那种指定生存时间,不用刷新,譬如说ttl为1天,那在一天后肯定过期,否则就可能出现state的ttl一直刷新,永远不过期,这样最终导致磁盘打满,看有解决方案使用定时任务自己删除,但是这样会严重损耗性能。请问大家还有其他方案吗*来自志愿者整理的flink邮件归档

展开
收起
彗星halation 2021-12-08 10:15:35 1144 0
1 条回答
写回答
取消 提交回答
  • 我觉得你的担心是在TTL尚未过期的周期内,数据就已经写满磁盘了,这个肯定不是TTL能涵盖的问题,从作业规模上尝试限制写入量,或者增大并发,降低单个rocksDB需要承担的数据量(前提是你的所有机器的磁盘空间是大于你的数据量的)。另外如果真的很担心的话,换一个压缩率更小的算法 也有一些帮助(代价是更耗时更耗CPU, rocksDB 官方推荐ZTSD或者Zlib)[1],设置compression type可以参考rocksdb ColumnFamilyOptions的setCompressionType 方法 [2]

    [1] https://github.com/facebook/rocksdb/wiki/Compression#configuration [2] https://github.com/facebook/rocksdb/blob/bc8b05cb779a578b5f5acf8d9390af1d17e65ff5/java/src/main/java/org/rocksdb/ColumnFamilyOptions.java#L282*来自志愿者整理的flink邮件归档

    2021-12-08 10:51:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载