摘要: 實時計算 Flink新增自動調優功能autoconf。可以在流做業以及上下游性能達到穩定的前提下,根據您做業的歷史運行情況,從新分配各算子資源和併發數,達到優化做業的目的。更多詳細說明請您參閱自動配置調優。html
實時計算 Flink新增自動調優功能autoconf。可以在流做業以及上下游性能達到穩定的前提下,根據您做業的歷史運行情況,從新分配各算子資源和併發數,達到優化做業的目的。更多詳細說明請您參閱自動配置調優。算法
上線做業。選擇智能推薦配置,指定使用CU數爲系統默認,不填便可。點擊下一步。
緩存
數據檢查,預估消耗CU數。
併發
在運維界面啓動做業,根據實際業務須要指定讀取數據時間。
運維
說明:實時計算做業啓動時候須要您指定啓動時間。實際上就是從源頭數據存儲的指定時間點開始讀取數據。指定讀取數據時間須要在做業啓動以前。例如,設置啓動時間爲1小時以前。性能
待做業穩定運行10分鐘後,且如下狀態符合要求,便可開始下一次性能調優。優化
中止>下線做業。
spa
從新上線做業。選擇智能推薦配置,指定使用CU數爲系統默認,不填便可。點擊下一步。
3d
數據檢查,再次預估消耗CU數。
日誌
在運維界面啓動做業,待做業穩定運行十分鐘後,便可再一次性能調優。
說明:
- 自動配置調優通常須要3到5次才能達到理想的調優效果。請完成首次性能調優後,重複非首次性能調優過程屢次。
- 每次調優前,請確保足夠的做業運行時長,建議10分鐘以上。
- 指定CU數(參考值) = 實際消耗CU數*目標RPS/當前RPS。
- 實際消耗CU數:上一次做業運行時實際消耗CU
- 目標RPS:輸入流數據的實際RPS(或QPS)
- 當前RPS:上一次做業運行時實際的輸入RPS
手動配置調優能夠分如下三個類型。
資源調優便是對做業中的Operator的併發數(parallelism)、CPU(core)、堆內存(heap_memory)等參數進行調優。
定位性能瓶頸節點
性能瓶頸節點爲Vertex拓撲圖最下游中參數IN_Q值爲100%的一個或者多個節點。以下圖,7號節點爲性能瓶頸節點。
分析性能瓶頸因素
性能瓶頸的可分爲三類。
以下圖,7號節點的性能瓶頸是資源(CPU和/或MEM)配置不足所致使。
說明:判斷性能瓶頸因素方法
- 瓶頸節點的資源健康分爲100,則認爲資源已經合理分配,性能瓶頸是併發數不足所致使。
- 瓶頸節點的資源健康分低於100,則認爲性能瓶頸是單個併發的資源(CPU和/或MEM)配置不足所致使。
- 無持續反壓,但資源健康分低於100,僅代表單個併發的資源使用率較高,但暫不影響做業性能,可暫不作調優。
經過做業運維頁面中Metrics Graph功能,進一步判斷性能瓶頸是CPU不足仍是MEM不足。步驟以下。
運維界面中,點擊TaskExecutor,找到性能瓶頸節點ID,點擊查看詳情。
選擇Metrics Graph,根據曲線圖判斷CPU或者MEM是否配置不足(不少狀況下二者同時不足)。
完成了性能瓶頸因素判斷後,點擊開發>基本屬性>跳轉到新窗口配置,開始調整資源配置。
批量修改Operator
點擊GROUP框,進入批量修改Operator數據窗口。
說明:
- GROUP內全部的operator具備相同的併發數。
- GROUP的core爲全部operator的最大值。
- GROUP的_memory爲全部operator之和。
- 建議單個Job維度的CPU:MEM=1:4,即1個核對應4G內存。
配置修改完成後點擊應用當前配置並關閉窗口。
單個修改Operator
點擊Operator框,進入修改Operator數據窗口。
配置修改完成後點擊應用當前配置並關閉窗口。
參數調整說明
您只需調整parallelism、core和heap_memory三個參數,即能知足大部分的資源調優需求。
在開發頁面的右側選擇做業參數。
輸入調優語句。
優化 | 解決問題 | 調優語句 |
---|---|---|
MiniBatch | 提高吞吐,下降對下游壓力僅對Group by有效。 | blink.miniBatch.allowLatencyMs=5000 blink.miniBatch.size=1000 |
LocalGlobal | 優化數據傾斜問題 | blink.localAgg.enable=true |
TTL | 設置State狀態時間 | 1.x:state.backend.rocksdb.ttl.ms=129600000 2.x:state.backend.niagara.ttl.ms=129600000 其中,1.x 表示需顯式開啓,2.x 表示默認開啓。 |
注意:添加或刪除MiniBatch或LocalGlobal參數,job狀態會丟失,修改值大小狀態不會丟失。
實時計算 Flink能夠在with參數內設置相應的參數,達到調優上下游存儲性能的目的。
調優步驟:
實時計算 Flink的每條數據均會觸發上下游存儲的讀寫,會對上下游存儲造成性能壓力。能夠經過設置batchsize,批量的讀寫上下游存儲數據來下降對上下游存儲的壓力。
名字 | 參數 | 詳情 | 設置參數值 |
---|---|---|---|
Datahub源表 | batchReadSize | 單次讀取條數 | 可選,默認爲10 |
Datahub結果表 | batchSize | 單次寫入條數 | 可選,默認爲300 |
日誌服務源表 | batchGetSize | 單次讀取logGroup條數 | 可選,默認爲10 |
ADB結果表 | batchSize | 每次寫入的批次大小 | 可選,默認爲1000 |
RDS結果表 | batchSize | 每次寫入的批次大小 | 可選,默認爲50 |
注意: 添加、修改或者刪除以上參數後,做業必須中止-啓動後,調優才能生效。
名字 | 參數 | 詳情 | 設置參數值 |
---|---|---|---|
RDS維表 | Cache | 緩存策略 | 默認值爲None ,可選LRU 、ALL 。 |
RDS維表 | cacheSize | 緩存大小 | 默認值爲None ,可選LRU 、ALL 。 |
RDS維表 | cacheTTLMs | 緩存超時時間 | 默認值爲None ,可選LRU 、ALL 。 |
OTS維表 | Cache | 緩存策略 | 默認值爲None , 可選LRU ,不支持ALL 。 |
OTS維表 | cacheSize | 緩存大小 | 默認值爲None , 可選LRU ,不支持ALL 。 |
OTS維表 | cacheTTLMs | 緩存超時時間 | 默認值爲None , 可選LRU ,不支持ALL 。 |
注意: 添加、修改或者刪除以上參數後,做業必須中止-啓動後,調優才能生效。
說明:完成資源、做業參數、上下游參數調優後,手動配置調優後續的步驟與自動配置調優基本一致。區別在於資源配置環節須要選擇使用上次資源配置。
A:可能性1:首次自動配置時指定了CU數,但指定的CU數過小(好比小於自動配置默認算法的建議值,多見於做業比較複雜的狀況),建議首次自動配置時不指定CU數。
可能性2:默認算法建議的CU數或指定的CU數超過了項目當前可用的CU數,建議擴容。
A:可能性1:若延時直線上升,需考慮是否上游source中部分partition中沒有新的數據,由於目前delay統計的是全部partition的延時最大值。
可能性2:Vertex拓撲中看不到持續反壓,那麼性能瓶頸點可能出如今source節點。由於source節點沒有輸入緩存隊列,即便有性能問題,IN_Q也永遠爲0(一樣,sink節點的OUT_Q也永遠爲0)。
解決方案:經過手動配置調優,將source節點(GROUP)中的operator中chainingStrategy修改成HEAD,將其從GROUP中拆解出來。而後上線運行後再看具體是哪一個節點是性能瓶頸節點,若依然看不到性能瓶頸節點,則多是由於上游source吞吐不夠,需考慮增長source的batchsize或增長上游source的shard數。
A:Vertex拓撲中某些節點的IN_Q持續爲100%則存在持續反壓狀況,最後一個(或多個)IN_Q爲100%的節點爲性能瓶頸點。以下示例:
上圖存在反壓,瓶頸在6號節點。
上圖存在反壓,瓶頸在2號節點。
上圖存在反壓,瓶頸在8號節點。
上圖可能存在節點,瓶頸在0號節點。
A:(1)表象上看,某些節點不論增長多大的併發仍存在性能瓶頸,則可能存在數據傾斜。
(2)在Vertex拓撲中點擊疑似存在數據傾斜的節點(通常爲性能瓶頸節點),進入SubTask List界面,重點觀察RecvCnt和InQueue,若各ID對應的RecvCnt值差別較大(通常超過1個數量級)則認爲存在數據傾斜,若個別ID的InQueue長期爲100%,則認爲可能存在數據傾斜。
解決方案:請您參看GROUP BY 數據出現熱點、數據傾斜。
A:這種問題通常發生在Vertex只有一個節點的狀況,此時因爲source上游的物理表的shard數爲1,Flink要求source的併發不能超過上游shard數,致使沒法增長併發,所以亦沒法增長到指定的CU數。
解決方案:
A:這是因爲做業的SQL有改動,致使DAG改變。
解決方案:經過從新獲取配置解決,開發-基本屬性-跳轉到新窗口配置-從新獲取配置信息。