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存到磁盘中。
标签:RocksDB,buffer,flink,write,state,调优,内存,writebuffer,backend 来源: https://www.cnblogs.com/feizaijiawenzhu/p/16147082.html