全部產品
Search
文件中心

Realtime Compute for Apache Flink:企業級狀態後端儲存配置

更新時間:Jul 13, 2024

本文為您介紹在使用企業級狀態後端儲存GeminiStateBackend時,可能會用到的一些調優參數。

背景資訊

在大部分情境下,基於自適應調參功能,GeminiStateBackend會自動調整參數而不需要您手動設定。您只需要根據業務情境,調整一些基本配置,詳情參見基本配置。在遇到特定情境時,您可以開啟一些配置來進行針對性的調優。例如:

  • 在希望協調記憶體資源和效能時,請使用記憶體配置,詳情請參見記憶體配置

  • 在遇到本地碟空間不足的問題時,請使用存算分離配置,詳情請參見存算分離配置

  • 在遇到Join運算元有效能瓶頸時,請使用KV分離配置,詳情請參見KV分離配置

說明

企業級狀態後端儲存的整體介紹和配置方法,詳情請參見企業級狀態後端儲存介紹設定State相關參數

基本配置

參數

說明

資料類型

預設值

備忘

table.exec.state.ttl

SQL作業的State TTL(Time To Live)。

Long

  • Realtime Compute引擎VVR 4.0.12及以上版本:預設值為1.5天。

  • Realtime Compute引擎VVR 4.0.12以下版本:預設值為空白,代表State不到期。

單位為毫秒,例如設定為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

取值如下:

  • false(預設值):臨時資料儲存在DFS上。

  • true:臨時資料儲存在本地磁碟,從而減少與DFS的互動,加快建立作業快照速度。如果您的本地磁碟空間足夠存放臨時資料,即本地磁碟空間使用率在30%以下,建議設定該參數為true。

說明
  • 僅Realtime Compute引擎VVR 4.0及以上版本支援該參數。

  • 在標準快照執行較慢時,建議您考慮啟用該參數。

記憶體配置

說明

以下記憶體配置參數支援版本是VVR 4.0及以上版本。

參數

說明

資料類型

預設值

備忘

state.backend.gemini.memory.managed

GeminiStateBackend是否自動根據Managed Memory來分配記憶體。

Boolean

true

參數取值如下:

  • true:系統將自動根據Managed Memory和task slot數計算每個Backend的記憶體。

  • false:每個Backend的記憶體大小將設定為state.backend.gemini.total.writebuffer.sizestate.backend.gemini.offheap.size參數值的和。

    您可以通過將該參數取值設定為false,並單獨配置WriteBuffer和Offheap的大小來協調記憶體資源和效能。

說明
  • 推薦您保持參數預設值,不用修改。

  • Realtime Compute引擎VVR 4.0.12版本及以上版本,該參數預設值為true;Realtime Compute引擎VVR 4.0.12以下版本,該參數預設值為false。

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

  • VVR 4.0.11版本:INFINITE

  • VVR 4.0.12及以上版本:LIMITED

參數取值如下:

  • INFINITE:不開啟存算分離,State資料只存在本地。

  • LIMITED:State資料首先儲存到本地,在超過本地磁碟限制時,儲存State資料到DFS中。

    當遇到因狀態資料過大造成本地碟空間不足的問題時,可以將該參數取值設定為LIMITED,同時根據本地磁碟限制情況,設定state.backend.gemini.file.cache.preserved-space參數。

    說明

    參數取值大小寫敏感。

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

  • VVR 4.0.12及後續4.0.x版本:DISABLE

  • VVR-6.0.1及以上版本:SPECIFIED_TABLE_ENABLE

參數取值如下:

  • DISABLE:禁用KV分離。

  • GLOBAL_ENABLE:啟用KV分離。

  • SPECIFIED_TABLE_ENABLE :由引擎根據作業運算元特點自動開啟或關閉KV分離。

    說明

    Realtime Compute引擎VVR 6.0.1及以上版本支援該取值。

說明
  • 參數取值大小寫敏感。

  • 在Realtime Compute引擎VVR 4.0.x版本中,如果您發現Join作業的Join成功率比較低而Value又比較大時,則可以將該參數取值設定為GLOBAL_ENABLE,進而取得更好的效能。

    您可以通過Join節點的Records Received和Records Sent的比例,大致估算Join成功率。

  • 在Realtime Compute引擎VVR 6.0.1及以上版本,推薦您保持參數預設值,SQL引擎會根據作業運算元特點自動開啟KV分離。

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

參數取值如下:

  • DISABLED:禁用該功能。

  • MONITORING:GeminiStateBackend會持續監控運行情況,並在日誌中給出調參建議,但不自動進行參數調整。

  • ACTIVE(預設值):GeminiStateBackend將持續監控運行情況,並自動進行參數調整。但只針對未在flink-conf.yaml中配置的Gemini相關的部分參數。

  • FORCEFUL:GeminiStateBackend將持續監控運行情況,並自動進行參數調整,同時會覆蓋在flink-conf.yaml中配置的Gemini相關的部分參數。

說明
  • 參數取值大小寫不敏感。

  • 推薦您保持參數預設值,不用修改。

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。

說明
  • 預設不配置該參數。

  • 輸入的end時間需要晚於start時間。

  • 設定該參數後會導致更多的資源消耗,因此推薦您保持預設不配置該參數。

state.backend.gemini.auto-tune.burst.end.x