參數名 |
說明 |
state.backend.rocksdb.block.blocksize |
block 的大小,默認值為4KB。在生產環境中總是會適當調大一些,一般32KB比較合適,對於機械硬盤可以再增大到128~256KB,充分利用其順序讀取能力。但是需要注意,如果 block 大小增大而 block cache 大小不變,那么緩存的 block 數量會減少,無形中會增加讀放大 (建議調整) |
state.backend.rocksdb.block.cache-size |
block cache 的大小,默認為8MB。由上文所述的讀寫流程可知,較大的 block cache 可以有效避免熱數據的讀請求落到 sstable 上,若內存余量充足,建議設置到256MB以上,如果state操作頻繁,數據量較大,可以設置更大,讀性能會有非常明顯的提升(建議調整) |
state.backend.rocksdb.compaction.level.max-size-level-base |
L1層的數據總大小閾值,默認值為256MB。每向上提升一級,閾值會乘以因子 max_bytes_for_level_multiplier(默認值為10)。由於上層的大小閾值都是以它為基礎推算出來的,所以要小心調整。建議設為 target_file_size_base 的倍數,且不能太小,例如5~10倍 |
state.backend.rocksdb.compaction.level.target-file-size-base |
L1層單個 sstable 文件的大小閾值,默認值為64MB。每向上提升一級,閾值會乘以因子 target_file_size_multiplier(但默認為1,即每級sstable最大都是相同的)。顯然,增大此值可以降低 compaction 的頻率,減少寫放大,但是也會造成舊數據無法及時清理,從而增加讀放大。此參數不太容易調整,一般不建議設為256MB以上 |
state.backend.rocksdb.compaction.level.use-dynamic-size |
這個參數之前講過。當開啟之后,上述閾值的乘法因子會變成除法因子,能夠動態調整每層的數據量閾值,使得較多的數據可以落在最高一層,能夠減少空間放大,整個 LSM Tree 的結構也會更穩定,對於機械硬盤的環境,建議開啟 |
state.backend.rocksdb.compaction.style |
compaction 算法,使用默認的 LEVEL(即 leveled compaction)即可 |
state.backend.rocksdb.files.open |
是 RocksDB 實例能夠打開的最大文件數,默認為-1,表示不限制。由於sstable的索引和布隆過濾器默認都會駐留內存,並占用文件描述符,所以如果此值太小,索引和布隆過濾器無法正常加載,就會嚴重拖累讀取性能 |
state.backend.rocksdb.thread.num |
后台負責 flush 和 compaction 的最大並發線程數,默認為1。注意 Flink 將這兩個參數合二為一處理(對應 DBOptions.setIncreaseParallelism() 方法),鑒於 flush 和 compaction 都是相對重的操作,如果 CPU 余量比較充足,建議調大,一般設為3-4 |
state.backend.rocksdb.write-batch-size |
允許指定 RocksDB 批量寫入時占用的最大內存量,默認為 2m,如果設置為 0 的話就會自動根據任務量進行調整。這個參數如果沒有特別的需求,可以不調整 |
state.backend.rocksdb.writebuffer.count |
memtable 的最大數量(包含活躍的和不可變的),默認是2。當全部 memtable 都寫滿但是 flush 速度較慢時,就會造成寫停頓,所以如果內存充足或者使用的是機械硬盤,建議適當調大這個參數,如4(建議調整) |
state.backend.rocksdb.writebuffer.number-to-merge |
在 flush 發生之前被合並的 memtable 最小數量,默認是1。舉個例子,如果此參數設為2,那么當有至少兩個不可變 memtable 時,才有可能觸發 flush(亦即如果只有一個不可變 memtable,就會等待)。調大這個值的好處是可以使更多的更改在 flush 前就被合並,降低寫放大,但同時又可能增加讀放大,因為讀取數據時要檢查的 memtable 變多了。經測試,該參數設為2或3相對較好(建議調整) |
state.backend.rocksdb.writebuffer.size |
單個 memtable 的大小,默認是64MB。當 memtable 大小達到此閾值時,就會被標記為不可變。一般來講,適當增大這個參數可以減小寫放大帶來的影響,但同時會增大 flush 后 L0、L1 層的壓力,所以還需要配合修改 compaction 參數(建議調整) |
taskmanager.memory.managed.fraction |
托管內存占Flink總內存的比例,默認0.4 |
taskmanager.memory.managed.size |
托管內存的大小,無默認值,一般也不指定,而是依照上述比例來推定,更加靈活 (注意) |
參考:
https://www.jianshu.com/p/96364463c831