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存到磁盤中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM