任務運維和資料指標相關知多少?
一、實時開發常見問題
1、一個實時計算任務該分配多少資源?
建議:一些簡單ETL任務,並且源資料流量在一定範圍內, tm個數1、全域性並行度1、記憶體1G。
分析:
全域性並行度為1,對於簡單ETL任務會有operator chain,在一個task(執行緒)中執行、減少執行緒切換、減少訊息序列化/反序列化等,該類問題的瓶頸一般在下游寫入端。
寫入端是瓶頸:一般建議開啟批次寫入(需要控制批次大小,防止記憶體溢位)、開啟多並行度寫入。
如果是單臺資料庫的瓶頸:開啟多個並行度就沒法提升效能、一般建議按照一定路由規則寫入多臺資料庫、建議使用分散式資料庫(如Hbase:提前建立分割槽、避免資料熱點寫入等)。
2、為什麼寫入Kafka結果中有些分割槽沒有資料?
建議:如果現有topic已經存在,並且是多個分割槽,結果表並行度設定partition數一樣。
分析:
由於Flink寫Kafka預設採用的是FixedPartitioner。如果並行度比partition大,則資料都會傳送到partition中,但是如果並行度比partition小,則有部分分割槽是沒有資料的。
source端,如果並行度小於partition,會取模的方式分給並行度,都會消費到資料。如果並行度大於partition,則會有部分task消費不到資料。
3、為什麼和維表關聯後任務處理資料的能力變慢?
建議:小資料量不常更新的維表使用ALL模式。大資料量的維表使用使用LRU模式,並且根據資料庫不同做相應的處理(比如關係型資料庫則建立索引等)。
分析:1.ALL模式啟動時候直接將資料全量載入到記憶體中,每次關聯資料不需要查庫,沒有其他開銷。2.非同步(async)查詢模式
LRU非同步查詢資料庫,可以併發地處理多個請求。
根據SQL中的關聯欄位順序建立複合索引。
防止關聯欄位索引失效(關聯順序不對、關聯列做計算等)。
如果維表欄位個數少,考慮將將多餘欄位都加入到索引中,減少回表(帶來的問題是索引變大)。
4、為什麼某些任務提高並行度能提升效能,某些不能?
建議:檢視是否資料傾斜,如果是將資料打散。
分析:
源頭是否資料傾斜。
SQL中是否存在導致傾斜的語句。
登陸到Flink web頁面檢視。
透過修改SQL解決或者打散groupby欄位。
二、實時任務運維
1、配置反壓告警
場景:反壓導致cp失敗,資料出現延遲或者不產出。
排查方法:
1)藉助Flink web-ui 提供的的反壓功能查詢具體的operatorChain。
2)查詢Flink metric 'inPoolUsage、outPoolUsage' 來確定具體的反壓運算元。
2、配置cp失敗告警
場景:cp失敗導致資料無法真正落地,任務恢復間隔太長。
排查方法:
1)是否存在反壓。
2)檢查叢集負載、IO、CPU、MEM 是否處於高負荷狀態。
3、拆分實時任務日誌
場景: Flink實時任務執行時間長之後導致日誌佔用磁碟大,另外一個大的日誌檔案不利於排查問題。
解決方法:
配置log4j.log的滾動引數,設定日誌按日期或者大小滾動生產,並且限制保留的大小。
4、監控任務執行中tm日誌
場景: 任務執行中產生的執行日誌沒有監控,比如網路抖動導致的連結失敗等等。
解決方法:
修改Flink自帶的log4j jar包中的程式碼,將異常日誌重定向一份到Kafka或ES中,進行後續分析,找到程式中可能存在的隱藏bug。
5、髒資料管理
場景:由於資料來源都是從Kafka過來的資料,可能存在資料型別錯誤、欄位名稱錯誤、欄位閾值在Flink中超範圍等。落庫過程中,由於欄位型別不匹配、閾值超範圍等等情況。
解決方法:
在資料解析和資料落庫等程式碼中,對catch中的資料進行收集。當異常資料達到一定的量時,告警通知。線下離線修正結果資料。
三、透過Metrics定位問題
1.常用內建Metrics介紹
端到端的延時(最大、平均、百分位):
flink_taskmanager_job_latency_source_id_operator_id_operator_subtask_index_latency
輸入資料量:
flink_taskmanager_job_task_operator_numRecordsIn
flink_taskmanager_job_task_numBytesIn
輸出資料量:
flink_taskmanager_job_task_operator_numRecordsOut
flink_taskmanager_job_task_numBytesOut
反壓值:
flink_taskmanager_job_task_isBackPressured
任務buffer:
inPoolUsage、outPoolUsage等其他
2、flinkStreamSql中常用metrics
業務延遲:
flink_taskmanager_job_task_operator_dtEventDelay(單位s)
資料本身的時間和進入flink的當前時間的差值。
各個輸入源的髒資料:
flink_taskmanager_job_task_operator_dtDirtyData
從Kafka獲取的資料解析失敗視為髒資料。
各Source的資料輸入TPS:
flink_taskmanager_job_task_operator_dtNumRecordsInRate
Kafka接受的記錄數(未解析前)/s。
各Source的資料輸入RPS:
flink_taskmanager_job_task_operator_dtNumRecordsInResolveRate
Kafka接受的記錄數(未解析前)/s。
各Source的資料輸入BPS:
flink_taskmanager_job_task_operator_dtNumBytestInRate
Kafka接受的位元組數/s。
Kafka作為輸入源的各個分割槽的延遲數:
flink_taskmanager_job_task_operator_topic_partition_dtTopicPartitionLag
當前Kafka10、Kafka11有采集該指標。
各個輸入源RPS:
fink_taskmanager_job_task_operator_dtNumRecordsOutRate
寫入的外部記錄數/s。
四、FlinkStreamSQL v1.11.1介紹
1.DDL建表語句和FlinkStreamSql v1.10之前版本保持一致。
2.DML語句有兩種不同的模式:
dtstack模式:和之前的版本是一致的。
Flink模式:和Flink原生的語法保持一致。
3.主要區別點:和維表join方式不同。
4.如何使用:在提交任務的時候加上 -planner dtstack/flink即可。
本文作者:劉星(花名:吹雪),袋鼠雲大資料開發工程師。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995740/viewspace-2763678/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 運維相關的資料整理運維
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- 指標相關指標
- 電商運營資料指標指標
- 任務預測指標整理指標
- 【原創】淺談指標(七)字串相關(詳細版本)與指標運算指標字串
- 資料庫與運維相關圖書一覽表資料庫運維
- Redis 相關運維操作Redis運維
- 專案任務與運維任務的衝突運維
- 運維監控指標彙總運維指標
- 指向常量資料的指標和常量指標指標
- 關於指標傳遞和指標的指標指標
- 壓力測試相關指標指標
- 雙指標相關演算法指標演算法
- 二維陣列和指標陣列指標
- 老凡的運維筆記 | 智慧化運維知多少?運維筆記
- spring定時任務相關Spring
- 資料標註行業知多少行業
- 指標運算子過載(* 和 ->)指標
- 任務運維 | 怎麼補資料?這有一篇實踐案例運維
- 徹底搞清C/C++中一維陣列,二維陣列,指標,陣列指標和指標陣列以及指向指標的指標,行地址和列地址之間的關係C++陣列指標
- 指標是構築自動化運維與智慧化運維的基石指標運維
- 指標陣列和陣列指標與二維陣列指標陣列
- 初學者 | NLP相關任務簡介
- 如何讓運維指標變得更有價值?運維指標
- Elasticsearch叢集運維相關知識Elasticsearch運維
- 資料庫自動維護任務的管理資料庫
- Oracle資料庫監控和運維關注哪些方面Oracle資料庫運維
- FreeRTOS-01-任務相關函式函式
- 一些運維相關的建議運維
- 運維相關 如何解決504報錯運維
- 運維相關環境與工具掃盲運維
- Mysql運維-資料庫及表相關操作MySql運維資料庫
- 微服務:指標和健康監控微服務指標
- JTS相關資料和示例
- 運營常用指標指標
- 61個社交媒體運營關鍵指標指標
- FreeRTOS-03-其它任務相關函式函式