企業(yè)級狀態(tài)后端存儲配置
本文為您介紹在使用企業(yè)級狀態(tài)后端存儲GeminiStateBackend時,可能會用到的一些調(diào)優(yōu)參數(shù)。
背景信息
在大部分場景下,基于自適應(yīng)調(diào)參功能,GeminiStateBackend會自動調(diào)整參數(shù)而不需要您手動配置。您只需要根據(jù)業(yè)務(wù)場景,調(diào)整一些基本配置,詳情參見基本配置。在遇到特定場景時,您可以開啟一些配置來進(jìn)行針對性的調(diào)優(yōu)。例如:
在希望協(xié)調(diào)內(nèi)存資源和性能時,請使用內(nèi)存配置,詳情請參見內(nèi)存配置。
在遇到本地盤空間不足的問題時,請使用存算分離配置,詳情請參見存算分離配置。
在遇到Join算子有性能瓶頸時,請使用KV分離配置,詳情請參見KV分離配置。
企業(yè)級狀態(tài)后端存儲的整體介紹和配置方法,詳情請參見企業(yè)級狀態(tài)后端存儲介紹和設(shè)置State相關(guān)參數(shù)。
基本配置
參數(shù) | 說明 | 數(shù)據(jù)類型 | 默認(rèn)值 | 備注 |
table.exec.state.ttl | SQL作業(yè)的State TTL(Time To Live)。 | Long |
| 單位為毫秒,例如設(shè)置為129600000,則表示過期時間為1.5天。不可與state.backend.gemini.ttl.ms共同使用。 說明 推薦您根據(jù)業(yè)務(wù)需求,設(shè)置一個較短的值。 |
state.backend.gemini.ttl.ms | DataStream或python作業(yè)的State TTL(Time To Live)。 | Long | (none) | 單位為毫秒,例如設(shè)置為129600000,則表示過期時間為1.5天。不可與table.exec.state.ttl共同使用。 說明 推薦您根據(jù)業(yè)務(wù)需求,設(shè)置一個較短的值。 |
state.backend.gemini.savepoint.external-sort.local-storage.enabled | 標(biāo)準(zhǔn)作業(yè)快照過程中產(chǎn)生的臨時數(shù)據(jù)是否儲存在本地磁盤。 | Boolean | false | 取值如下:
說明
|
內(nèi)存配置
以下內(nèi)存配置參數(shù)支持版本是VVR 4.0及以上版本。
參數(shù) | 說明 | 數(shù)據(jù)類型 | 默認(rèn)值 | 備注 |
state.backend.gemini.memory.managed | GeminiStateBackend是否自動根據(jù)Managed Memory來分配內(nèi)存。 | Boolean | true | 參數(shù)取值如下:
說明
|
state.backend.gemini.total.writebuffer.size | WriteBuffer占用的內(nèi)存總大小。 | String | 128 MB | 在state.backend.gemini.memory.managed參數(shù)值為false時生效,否則WriteBuffer占用的內(nèi)存總大小將由Managed Memory自動計(jì)算。 配置該參數(shù)值時,需要明確增加單位后綴,單位為B、KB、MB和GB。 說明
|
state.backend.gemini.offheap.size | GeminiStateBackend使用的堆外內(nèi)存的大小。 說明 Gemini使用的這部分堆外內(nèi)存不包括WriteBuffer使用的部分。 | String | (none) | 在state.backend.gemini.memory.managed參數(shù)值為false時生效,否則GeminiStateBackend使用的堆外內(nèi)存的大小將由Managed Memory自動計(jì)算。 配置該參數(shù)值時,需要明確增加單位后綴,單位為B、KB、MB和GB。 說明
|
Apache Flink中Checkpoint和StateBackend的基礎(chǔ)配置同樣適用于GeminiStateBackend,詳情請參見Checkpoints and State Backends。
存算分離配置
以下存算分離配置參數(shù)支持版本是VVR 4.0.11及以上版本。
參數(shù) | 說明 | 數(shù)據(jù)類型 | 默認(rèn)值 | 備注 |
state.backend.gemini.file.cache.type | 存算分離的模式。 | String |
| 參數(shù)取值如下:
|
state.backend.gemini.file.cache.preserved-space | 單個TaskManager上剩余的State數(shù)據(jù)可用磁盤空間。 | String | 2 GB | 當(dāng)實(shí)際可用空間小于該值時,GeminiStateBackend將把State數(shù)據(jù)存儲到DFS中,以擺脫本地存儲規(guī)格的限制。 配置該參數(shù)值時,需要明確增加單位后綴,單位為B、KB、MB和GB。 說明
|
在使用OSS作為分布式文件系統(tǒng)時,可能會發(fā)生意料外的磁盤空間占用情況,這是由于OSS Client SDK會將文件先完整寫到本地磁盤,再進(jìn)行上傳。而Flink在執(zhí)行Savepoint時,單個StateBackend僅會產(chǎn)生一個文件,這就導(dǎo)致了創(chuàng)建Savepoint時,本地會創(chuàng)建一個很大體積的未壓縮文件,會導(dǎo)致意料外的磁盤空間占用。目前在這種情況下存算分離并不能起到作用,需要使用擴(kuò)大并發(fā)數(shù)量等手段減少單節(jié)點(diǎn)的State大小。
KV分離配置
以下KV分離配置參數(shù)支持版本是VVR 4.0.12及以上版本。
參數(shù) | 說明 | 數(shù)據(jù)類型 | 默認(rèn)值 | 備注 |
state.backend.gemini.kv.separate.mode | KV分離的模式。 | String |
| 參數(shù)取值如下:
說明
|
state.backend.gemini.kv.separate.value.size.threshold | 在啟用KV分離后,觸發(fā)KV分離的Value大小閾值。 | Integer | 200 | 在達(dá)到該閾值后的Record會將Key和Value分離存儲。建議取值范圍為150~1000,可以根據(jù)Join成功率調(diào)整該參數(shù),Join成功率越高,該參數(shù)可以設(shè)置得越大。 單位為字節(jié)(Bytes)。 說明 在實(shí)時計(jì)算引擎VVR 6.0.1及以上版本,如果您已開啟自適應(yīng)調(diào)參模式,則引擎內(nèi)部會根據(jù)數(shù)據(jù)特點(diǎn)動態(tài)調(diào)整該參數(shù),無需您顯式配置。 |
自適應(yīng)調(diào)參配置
以下自適應(yīng)調(diào)參配置參數(shù)支持版本是VVR 4.0.12及以上版本。
參數(shù) | 說明 | 數(shù)據(jù)類型 | 默認(rèn)值 | 備注 |
state.backend.gemini.auto-tune.mode | 自適應(yīng)調(diào)參的模式。 | String | ACTIVE | 參數(shù)取值如下:
說明
|
state.backend.gemini.auto-tune.burst.start.x | 自適應(yīng)調(diào)參下采用性能優(yōu)先模式的時間段。 | String | (none) | 參數(shù)名稱中的x為任意數(shù)字,start.x與end.x對應(yīng),可以借此來設(shè)置多個時間段。參數(shù)值的格式為yyyy-MM-dd HH:mm:ss。 當(dāng)您更關(guān)注TPS而非綜合效能時,可以配置這兩個參數(shù),GeminiStateBackend將在該時間段采用TPS優(yōu)先的策略,以耗費(fèi)更多的資源(CPU或MEM)為代價,達(dá)到更高的TPS。 說明
|
state.backend.gemini.auto-tune.burst.end.x |