本文為您介紹在使用企業級狀態後端儲存GeminiStateBackend時,可能會用到的一些調優參數。
背景資訊
在大部分情境下,基於自適應調參功能,GeminiStateBackend會自動調整參數而不需要您手動設定。您只需要根據業務情境,調整一些基本配置,詳情參見基本配置。在遇到特定情境時,您可以開啟一些配置來進行針對性的調優。例如:
在希望協調記憶體資源和效能時,請使用記憶體配置,詳情請參見記憶體配置。
在遇到本地碟空間不足的問題時,請使用存算分離配置,詳情請參見存算分離配置。
在遇到Join運算元有效能瓶頸時,請使用KV分離配置,詳情請參見KV分離配置。
企業級狀態後端儲存的整體介紹和配置方法,詳情請參見企業級狀態後端儲存介紹和設定State相關參數。
基本配置
參數 | 說明 | 資料類型 | 預設值 | 備忘 |
table.exec.state.ttl | SQL作業的State TTL(Time To Live)。 | Long |
| 單位為毫秒,例如設定為129600000,則表示到期時間為1.5天。不可與state.backend.gemini.ttl.ms共同使用。 說明 推薦您根據業務需求,設定一個較短的值。 |
state.backend.gemini.ttl.ms | DataStream或python作業的State TTL(Time To Live)。 | Long | (none) | 單位為毫秒,例如設定為129600000,則表示到期時間為1.5天。不可與table.exec.state.ttl共同使用。 說明 推薦您根據業務需求,設定一個較短的值。 |
state.backend.gemini.savepoint.external-sort.local-storage.enabled | 標準作業快照過程中產生的臨時資料是否儲存在本地磁碟。 | Boolean | false | 取值如下:
說明
|
記憶體配置
以下記憶體配置參數支援版本是VVR 4.0及以上版本。
參數 | 說明 | 資料類型 | 預設值 | 備忘 |
state.backend.gemini.memory.managed | GeminiStateBackend是否自動根據Managed Memory來分配記憶體。 | Boolean | true | 參數取值如下:
說明
|
state.backend.gemini.total.writebuffer.size | WriteBuffer佔用的記憶體總大小。 | String | 128 MB | 在state.backend.gemini.memory.managed參數值為false時生效,否則WriteBuffer佔用的記憶體總大小將由Managed Memory自動計算。 配置該參數值時,需要明確增加單位尾碼,單位為B、KB、MB和GB。 說明
|
state.backend.gemini.offheap.size | GeminiStateBackend使用的堆外記憶體的大小。 說明 Gemini使用的這部分堆外記憶體不包括WriteBuffer使用的部分。 | String | (none) | 在state.backend.gemini.memory.managed參數值為false時生效,否則GeminiStateBackend使用的堆外記憶體的大小將由Managed Memory自動計算。 配置該參數值時,需要明確增加單位尾碼,單位為B、KB、MB和GB。 說明
|
Apache Flink中Checkpoint和StateBackend的基礎配置同樣適用於GeminiStateBackend,詳情請參見Checkpoints and State Backends。
存算分離配置
以下存算分離配置參數支援版本是VVR 4.0.11及以上版本。
參數 | 說明 | 資料類型 | 預設值 | 備忘 |
state.backend.gemini.file.cache.type | 存算分離的模式。 | String |
| 參數取值如下:
|
state.backend.gemini.file.cache.preserved-space | 單個TaskManager上剩餘的State資料可用磁碟空間。 | String | 2 GB | 當實際可用空間小於該值時,GeminiStateBackend將把State資料存放區到DFS中,以擺脫本機存放區規格的限制。 配置該參數值時,需要明確增加單位尾碼,單位為B、KB、MB和GB。 說明
|
在使用OSS作為Distributed File System時,可能會發生意料外的磁碟空間佔用情況,這是由於OSS Client SDK會將檔案先完整寫到本地磁碟,再進行上傳。而Flink在執行Savepoint時,單個StateBackend僅會產生一個檔案,這就導致了建立Savepoint時,本地會建立一個很大體積的未壓縮檔,會導致意料外的磁碟空間佔用。目前在這種情況下存算分離並不能起到作用,需要使用擴大並發數量等手段減少單節點的State大小。
KV分離配置
以下KV分離配置參數支援版本是VVR 4.0.12及以上版本。
參數 | 說明 | 資料類型 | 預設值 | 備忘 |
state.backend.gemini.kv.separate.mode | KV分離的模式。 | String |
| 參數取值如下:
說明
|
state.backend.gemini.kv.separate.value.size.threshold | 在啟用KV分離後,觸發KV分離的Value大小閾值。 | Integer | 200 | 在達到該閾值後的Record會將Key和Value分離儲存。建議取值範圍為150~1000,可以根據Join成功率調整該參數,Join成功率越高,該參數可以設定得越大。 單位為位元組(Bytes)。 說明 在Realtime Compute引擎VVR 6.0.1及以上版本,如果您已開啟自適應調參模式,則引擎內部會根據資料特點動態調整該參數,無需您顯式配置。 |
自適應調參配置
以下自適應調參配置參數支援版本是VVR 4.0.12及以上版本。
參數 | 說明 | 資料類型 | 預設值 | 備忘 |
state.backend.gemini.auto-tune.mode | 自適應調參的模式。 | String | ACTIVE | 參數取值如下:
說明
|
state.backend.gemini.auto-tune.burst.start.x | 自適應調參下採用效能優先模式的時間段。 | String | (none) | 參數名稱中的x為任一數字,start.x與end.x對應,可以藉此來設定多個時間段。參數值的格式為yyyy-MM-dd HH:mm:ss。 當您更關注TPS而非綜合效能時,可以配置這兩個參數,GeminiStateBackend將在該時間段採用TPS優先的策略,以耗費更多的資源(CPU或MEM)為代價,達到更高的TPS。 說明
|
state.backend.gemini.auto-tune.burst.end.x |