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参数调优的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程