flink调优之RocksDB参数调优
2022/4/15 6:15:46
本文主要是介绍flink调优之RocksDB参数调优,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
下图是RocksDB的工作流程,一共进行三个步骤,
①将数据写入内存中的活跃表 Active MenTable
②将活跃表转化成只读表 ReadOnlyMemTable
③将只读表flush到本地磁盘上 LocalDish
具体调优方法
- ①增大整块缓存,减小刷写的频率。
该块内存为flink的管理内存,默认为全部内存的0.4倍,可以根据使用情况调大。
- ②增大block缓存
整个RocksDB共享一个block cache,读数据时内存的chache大小,该参数越大读数据时缓存命中率越高,默认大小为8MB,建议设置到64~256MB
state.backend.rocksdb.block.cache-size:64m //默认8MB
- ③增大write buffer和level阈值大小
RocksDB中,每个state使用一个Column Family,每个Column Family使用独占的write buffer,默认64MB,建议调大,提高写的效率
调整这个参数通常要适当增加L1层的大小阈值max-size-level-base,默认256m。因为write buffer增大后该值不增大会导致更快合并导致次数过多
该值太小会造成,因为合并次数过多,能存放的SST文件过少,层级变多造成查找困难
太大会造成,文件过多(没有达到合并阈值的文件变多),并且文件太大会造成合并困难
建议设置为target_flie_size_base(默认64MB)的倍数,且不能太小,一般为5~10倍,即320~640MB
state.backend.rockdb.writebuffer,size:128m
state.backend.rocksdb.compaction.level.max-size-level-base:320m
- ④增大write buffer数量
每个Column Family对应的write buffer最大数量,这实际上是内存中“只读内存表”的最大数量,默认值是2.
即是说一个state在只读内存表中使用2个写入缓冲(默认64MB),可以在内存中缓冲2次写入等待被flush。
如果是机械硬盘且内存足够大,可以调大到5左右
state.backend.rocksdb.writebuffer.count:5
- ⑤增大用于后台flush和合并sst文件的线程数。
默认为1,建议调大,机械硬盘用户可以改为4等更大的值。
state.backend.rocksdb.thread.num:4
在13版本之后RocksDB的预定义选项SPINNING_DISK_OPTIMIZED中也有该值被设置为4
- ⑥增大write buffer最小合并数
将数据从writebuffer中flush到磁盘时,需要合并的writebuffer最小数量,默认值为1,可以调的大一些比如3
state.backend.rocksdb.writebuffer.number-to-merge:3
如第④条所说,如果调大了writebuffer的数量为5,那么内存中就会最多存在5个只读的memtable,调大该参数可以一次flush3个memtable经过合并后变成SSTtable存到磁盘中。
这篇关于flink调优之RocksDB参数调优的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享