1. 程式人生 > 其它 >flink調優之RocksDB引數調優

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