本文翻譯自官網:Configuration https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/config.html
默認情況下,Table&SQL API已預先配置為產生具有可接受性能的准確結果。
根據表程序的要求,可能需要調整某些參數以進行優化。例如,無界流程序可能需要確保所需的狀態大小是有上限的(請參閱流概念)。
總覽
在每個表環境中,TableConfig提供了用於配置當前會話的選項。
對於常見或重要的配置選項,TableConfig提供了具有詳細內聯文檔的getter和setter方法。
對於更高級的配置,用戶可以直接訪問基礎鍵值映射。以下各節列出了可用於調整Flink Table和SQL API程序的所有可用選項。
注意:由於執行操作時會在不同的時間點讀取選項,因此建議在實例化表環境后盡早設置配置選項。
// instantiate table environment val tEnv: TableEnvironment = ... // access flink configuration val configuration = tEnv.getConfig().getConfiguration() // set low-level key-value options configuration.setString("table.exec.mini-batch.enabled", "true") configuration.setString("table.exec.mini-batch.allow-latency", "5 s") configuration.setString("table.exec.mini-batch.size", "5000")
主要:當前僅 Blink planner 支持鍵值對的配置選項
執行配置選項
以下選項可用於調整查詢執行的性能。
| Key | Default | Description |
|---|---|---|
table.exec.async-lookup.buffer-capacityBatch Streaming |
100 | async lookup join 可以觸發的最大 async i/o 操作的數量 |
table.exec.async-lookup.timeoutBatch Streaming |
"3 min" | 異步操作完成的 超時時間 |
table.exec.disabled-operatorsBatch |
(none) | 主要用於測試. 以逗號分隔的運算符名稱列表,每個名稱代表一種禁用的運算符。 可以禁用的運算符包括“ NestedLoopJoin”,“ ShuffleHashJoin”,“ BroadcastHashJoin”, “ SortMergeJoin”,“ HashAgg”,“ SortAgg”。 默認情況下,未禁用任何運算符. |
table.exec.mini-batch.allow-latencyStreaming |
"-1 ms" | 最大等待時間可用於MiniBatch緩沖輸入記錄。 MiniBatch是用於緩沖輸入記錄以減少狀態訪問的優化。 MiniBatch以允許的等待時間間隔以及達到最大緩沖記錄數觸發。 注意:如果將table.exec.mini-batch.enabled設置為true,則其值必須大於零. |
table.exec.mini-batch.enabledStreaming |
false | 指定是否啟用MiniBatch優化。 MiniBatch是用於緩沖輸入記錄以減少狀態訪問的優化。 默認情況下禁用此功能。 要啟用此功能,用戶應將此配置設置為true。 注意:如果啟用了mini batch 處理, 則必須設置“ table.exec.mini-batch.allow-latency”和“ table.exec.mini-batch.size”. |
table.exec.mini-batch.sizeStreaming |
-1 | 可以為MiniBatch緩沖最大輸入記錄數。 MiniBatch是用於緩沖輸入記錄以減少狀態訪問的優化。 MiniBatch以允許的等待時間間隔以及達到最大緩沖記錄數觸發。 注意:MiniBatch當前僅適用於非窗口聚合。 如果將table.exec.mini-batch.enabled設置為true,則其值必須為正. |
table.exec.resource.default-parallelismBatch Streaming |
-1 | 為所有運算符(例如聚合,聯接,過濾器)設置默認並行度以與並行實例一起運行。 此配置比StreamExecutionEnvironment的並行性具有更高的優先級 (實際上,此配置優先於StreamExecutionEnvironment的並行性)。 值-1表示未設置默認的並行性,則使用StreamExecutionEnvironment的並行性將回退. |
table.exec.resource.external-buffer-memoryBatch |
"10 mb" | 設置在排序合並聯接和嵌套聯接以及窗口上使用的外部緩沖存儲器大小. |
table.exec.resource.hash-agg.memoryBatch |
"128 mb" | 設置哈希聚合運算符的托管內存大小. |
table.exec.resource.hash-join.memoryBatch |
"128 mb" | 設置哈希聯接運算符的托管內存。 定義下限. |
table.exec.resource.sort.memoryBatch |
"128 mb" | 設置排序運算符的托管緩沖區內存大小. |
table.exec.shuffle-modeBatch |
"batch" | 設置執行 shuffle 模式。 只能設置 batch 或 pipeline。 batch:工作將逐步進行。 pipeline:作業將以流模式運行,但是當發送方擁有資源等待將數據發送到接收方時, 接收方等待資源啟動可能會導致資源死鎖. |
table.exec.sort.async-merge-enabledBatch |
true | 是否異步合並排序的溢出文件. |
table.exec.sort.default-limitBatch |
-1 | 用戶 order 后未設置限制時的默認限制。 -1表示此配置被忽略. |
table.exec.sort.max-num-file-handlesBatch |
128 | 外部合並排序的最大扇入。 它限制了每個運算符的文件句柄數。 如果太小,可能會導致中間合並。 但是,如果太大,將導致同時打開太多文件,占用內存並導致隨機讀取. |
table.exec.source.idle-timeoutStreaming |
"-1 ms" | 當 source 在超時時間內未收到任何元素時,它將被標記為臨時空閑。 這樣,下游任務就可以前進其水印,而無需在空閑時等待來自該源的水印. |
table.exec.spill-compression.block-sizeBatch |
"64 kb" | 溢出數據時用於壓縮的內存大小。 內存越大,壓縮率越高,但是作業將消耗更多的內存資源. |
table.exec.spill-compression.enabledBatch |
true | 是否壓縮溢出的數據。 目前,我們僅支持對sort和hash-agg和hash-join運算符壓縮溢出的數據. |
table.exec.window-agg.buffer-size-limitBatch |
100000 | 設置組窗口agg運算符中使用的窗口元素緩沖區大小限制。 |
優化器選項
以下選項可用於調整查詢優化器的行為,以獲得更好的執行計划。
| Key | Default | Description |
|---|---|---|
table.optimizer.agg-phase-strategyBatch Streaming |
"AUTO" | 匯總階段的策略。 只能設置AUTO,TWO_PHASE或ONE_PHASE。 自動:聚合階段沒有特殊的執行器。 選擇兩階段匯總還是一階段匯總取決於成本。 TWO_PHASE:強制使用具有localAggregate和globalAggregate的兩階段聚合。 請注意,如果聚合調用不支持分為兩階段的優化,我們仍將使用一級聚合。 ONE_PHASE:強制使用僅具有CompleteGlobalAggregate的一級聚合. |
table.optimizer.distinct-agg.split.bucket-numStreaming |
1024 | 拆分獨立聚合時配置存儲桶數。 該數字在第一級聚合中用於計算存儲區密鑰“ hash_code(distinct_key)%BUCKET_NUM”,該存儲區密鑰在拆分后用作附加組密鑰. |
table.optimizer.distinct-agg.split.enabledStreaming |
false | 告訴優化程序是否將不同的聚合(例如COUNT(DISTINCT col),SUM(DISTINCT col))分成兩個級別。 第一次聚合被一個附加 key shuffle,該附加 key 使用distinct_key的哈希碼和存儲桶數計算得出。 當不同的聚合中存在數據傾斜時,此優化非常有用,並且可以擴大工作量。 默認為false. |
table.optimizer.join-reorder-enabledBatch Streaming |
false | 在優化器中啟用聯接重新排序。 默認為禁用. |
table.optimizer.join.broadcast-thresholdBatch |
1048576 | 配置表的最大大小(以字節為單位),該表在執行聯接時將廣播到所有工作程序節點。 通過將此值設置為-1以禁用廣播. |
table.optimizer.reuse-source-enabledBatch Streaming |
true | 如果為true,則優化器將嘗試找出重復的表源並重新使用它們。 僅當啟用table.optimizer.reuse-sub-plan為true時,此方法才有效. |
table.optimizer.reuse-sub-plan-enabledBatch Streaming |
true | 當為 true 時,優化器將嘗試找出重復的子計划並重用它們。 |
table.optimizer.source.predicate-pushdown-enabledBatch Streaming |
true | 如果為true,則優化器會將謂詞下推到FilterableTableSource中。 默認值為true. |
歡迎關注Flink菜鳥公眾號,會不定期更新Flink(開發技術)相關的推文

