微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

每个Column Family对应的write buffer最大数量,这实际上是内存中“只读内存表”的最大数量认值是2.

即是说一个state在只读内存表中使用2个写入缓冲(认64MB),可以在内存中缓冲2次写入等待被flush。

如果是机械硬盘且内存足够大,可以调大到5左右

state.backend.rocksdb.writebuffer.count:5

认为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存到磁盘中。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐