IoT資料傾斜如何解決
在開發實時Flink任務的時候,可能會出現任務業務延時較高,超出預期的時間範圍,導致資料無法及時正確產出的情景。比如摘要介紹的資料傾斜場景。這個時候就要從多個維度對任務進行調優。下面將介紹實時任務調優的一些方法。
定位效能瓶頸Vertex
首先要定位出現問題的Vertex。在 執行資訊 > Vertex拓撲中檢視節點的資訊。每個Vertex會有自己的健康分,當某個Vertex健康分過低時,該Vertex可能出現問題,從而影響整個鏈路。
鏈路中的 Vertex 也會出現反壓現象。反壓是指當下遊的Vertex處理資料的能力不足時,上游會停止傳送資料,避免資料丟失。定位反壓節點可以看IN_Q和OUT_Q指標。每個Vertex的資訊中,有IN_Q和OUT_Q指標,分別表示進入佇列和輸出佇列中元素個數/佇列總長度。當一個Vertex的IN_Q滿,OUT_Q空,則該節點有效能問題,會對上游的節點造成反壓。另外一種方式是, 在 節點資訊中,檢視BackPressure > Status,如果是綠色ok,則不存在反壓,如果是紅色high,則存在反壓,該節點的下游存在效能瓶頸。
找到效能出現瓶頸的節點後,開始對節點進行調優。
資源和引數調優
任務出現效能瓶頸一個很大的原因是資源分配不足,這個時候就需要對資源配置,例如 併發數(Parallelism)、CPU(Core)和堆記憶體(Heap Memory)進行調優。其中core的預設值是0.1,一般建議配置為0.25,除了當處理資料來源較小,且任務的計算邏輯不復雜的時候,可以為任務統一分配1CU,此時每個節點的core隨機根據節點的複雜度分配。
在core配置一定的情況下,調整節點的併發數,為節點分配資源。如果該節點是source節點,考慮資料來源表的大小和資料來源表分割槽的多少。根據資料來源表的大小分配併發數,且併發數不超過源表分割槽的數量。例如資料來源表是sls源表,只有兩個分割槽時,只用一個併發就夠了,最多兩個。如果該節點是中間的計算節點,預算計算節點的複雜度,根據複雜度分配併發數。儘量把含有複雜運算的節點拆解出來,為其獨立分配併發。
引數調優分為上下游引數的調優和作業引數的調優。針對上下游引數的調優主要是設定batchsize,因為flink處理流式資料,每條資料均會觸發上下讀寫, 為了降低上下游讀寫的壓力,設定batchsize可以批次讀寫資料。該引數在DDL的with引數中設定。
當任務涉及到聚合邏輯(group by, partition by等)時,需要加入任務調優引數。任務調優引數在作業引數中設定。
MiniBatch |
提升吞吐,降低對下游壓力 |
LocalGlobal |
最佳化資料傾斜問題 |
TTL |
設定 State 狀態時間 |
程式碼調優
調整資源和引數後,如果任務仍存在效能瓶頸,需要最佳化程式碼。
資料傾斜問題
判斷資料傾斜:在執行資訊 > Vertex拓撲中選中一個節點後,在右側的詳細頁面中選擇SubTasks,檢視是否出現資料傾斜問題。觀察每個task的In Queue, Bytes Received和Records Received。如果某一兩個Task的In Queue百分比或者Bytes Received特別高,和其他的task的In Queue形成明顯差別,尤其當某個task In Queue的百分比長期為100%,其他的為0%,則出現了資料傾斜。
解決方案
- 利用hashcode和MD5手動打散資料,儘量使資料均勻分佈。 Io T 資料 的一大特點就是資料傾斜比較嚴重,使用者的資料量差異較大,在進行聚合運算時,經常會出現 key 聚集的情況,這種現象反應到 flink 的任務劃分上,就是同一個 Vertex 拓撲 中,部分 subtasks 資源過載,無法快速處理完資料,造成整個任務的反壓現象。解決這個現象的辦法就是 進行資料的打散。
- 使用LocalGroupAggregate
在group by的時候開啟local aggregate。其中注意統計函式用sum的時候要配合filter,才能開啟local group aggregate。
分組排名問題TOPN
- TOPN 一共有三種演算法,效能從高到低分別是:UpdateFastRank、 UnaryUpdateRank和RetractRank。涉及TOP N函式時,內部演算法儘量使用UpdateFastRank。會使效能更好。下圖分別打散和不打散資料的效能對比和使用UpdateFastRank和RetractRank演算法時的效能對比。(上下兩個任務流程的資料來源完全相同)
- 在多個維度對指標進行排名時,儘量使程式並行化,多使用union all。例如 IoT 的資料層級細分很細,有云賬號,租戶,例項,產品, 裝置的層級概念,這些資料 還 具有地域特性,地域的粒度也可以層級細分到國家,省份,城市等。所以當需要在不同維度對指標進行不同地域粒度的排名時,可以分別進行類目處理,平行計算,再用union all的方式整合,提高資料處理效率。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70017009/viewspace-2916913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何解決 Redis 資料傾斜、熱點等問題Redis
- 資料傾斜解決辦法
- Spark 資料傾斜及其解決方案Spark
- 如何解決Hive中經常出現的資料傾斜問題Hive
- Hive千億級資料傾斜解決方案Hive
- 【Spark篇】---Spark解決資料傾斜問題Spark
- Spark學習——資料傾斜Spark
- 大資料SQL優化之資料傾斜解決案例全集大資料SQL優化
- hive優化-資料傾斜優化Hive優化
- 實戰 | Hive 資料傾斜問題定位排查及解決Hive
- 一種自平衡解決資料傾斜的分表方法
- hadoop 透過cachefile來避免資料傾斜Hadoop
- 【Hive】資料傾斜優化 shuffle, join, group byHive優化
- PostgreSQL DBA(193) - 資料傾斜下的HashJoinSQL
- Redis 切片叢集的資料傾斜分析Redis
- Spark SQL三種join和資料傾斜的產生和解決辦法SparkSQL
- Spark效能最佳化篇三:資料傾斜調優Spark
- Oracle面對“資料傾斜列使用繫結變數”場景的解決方案Oracle變數
- 五款傾斜攝影與三維資料處理工具介紹:GISBox、Cesiumlab、OSGBLab、靈易智模、傾斜伴侶
- Redis 資料傾斜與 JD 開源 hotkey 原始碼分析揭秘Redis原始碼
- Cesium傾斜模型單體化模型
- Oracle資料傾斜導致的問題-無繫結變數Oracle變數
- Oracle資料傾斜導致的問題-有繫結變數Oracle變數
- salesforce零基礎學習(九十九)Salesforce Data Skew(資料傾斜)Salesforce
- PIoU Loss:傾斜目標檢測專用損失函式,公開超難傾斜目標資料集Retail50K | ECCV 2020 Spotlight函式AI
- 數倉效能最佳化:傾斜最佳化-表示式計算傾斜的hint最佳化
- 傾斜單體化模型技術實現模型
- 傾斜攝影測量知識基礎
- 編號函式 自定義函式 集合型別 表的優化 資料傾斜函式型別優化
- Echarts x軸文字顯示不全(傾斜、豎直)Echarts
- CSS3頁面傾斜一定的角度CSSS3
- 直播小程式原始碼,Android 傾斜文字 效果設定原始碼Android
- 傾斜攝影osgb格式檔案,進行座標轉換
- 如何實現傾斜攝影三維模型OSGB格式輕量化模型
- 傾斜攝影技術構建圖撲 WebGIS 智慧展館Web
- emiya-canvas.js 解決ios下拍照傾斜與canvas高清屏下繪圖模糊問題CanvasJSiOS繪圖
- iOS開發UI篇--使用UICollectionView實現一個傾斜列表效果iOSUIView
- 傾斜攝影三維模型的立體裁剪的問題分析模型