《5、鄒云鶴-BIGO使用Flink做Olap分析及實時數倉的實踐及優化.pdf》由會員分享,可在線閱讀,更多相關《5、鄒云鶴-BIGO使用Flink做Olap分析及實時數倉的實踐及優化.pdf(35頁珍藏版)》請在三個皮匠報告上搜索。
1、鄒云鶴/BIGO Staff EngineerBIGOBIGO使用使用FlinkFlink做做OlapOlap分析及實時數倉的分析及實時數倉的實踐及優化實踐及優化背景背景落地實踐落地實踐特色特色&改進改進業務場景業務場景未來規劃未來規劃#1#2#3#4#5#1#1BIGO OLAPBIGO OLAP分析平臺分析平臺&實時數倉的業務背景實時數倉的業務背景主要業務為全球用戶提供直播服務B BigoLiveigoLive短視頻創作及分享APPL Likeeikee全球免費通信工具IMOIMOBIGO 大數據平臺數據流轉WebAppDB BinLog百納接入BDP接入數據接入數據接入FlinkSpar
2、kPresto數據計算數據計算PrometheusKV存儲MySQLKafkaPulsarSpark任務入口Presto查詢實時任務入口資源管理元數據管理HiveClickHouse消息隊列離線存儲監控告警Hive數據輸出數據輸出ClickHouse實時監控即席查詢實時報表數據應用數據應用實時推薦ClickHouse存在的問題OLAP分析平臺入口不統一用戶體驗不好資源利用率低問題問題一一離線任務計算時延高部分計算任務產出結果太慢問題問題二二計算任務煙囪式的開發,缺少數據分層,缺少數據血緣問題問題三三OneSQL-Olap 系統&建設實時數倉OneSQL 集多種OLAP查詢引擎(presto/s
3、park/flink)于一體,充分利用各集群計算資源 統一查詢入口實時數倉 基于Flink 構建實時數倉任務,使用kafka/pulsar 實施實時數據分層管理 平臺化管理實時任務,建立任務血緣關系加速產出 將部分離線計算慢的任務遷移到實時計算上 構造實時數倉寬表#2 2BIGO OLAPBIGO OLAP分析平臺分析平臺&實時數倉實時數倉 落地實踐落地實踐集Presto/Spark/Flink于一體的OneSQL Olap系統1.統一查詢入口,智能選擇執行引擎,減少用戶盲目選擇;2.查詢執行失敗重試,當SQL在一個引擎上執行失敗,會選擇其他引擎來重試執行;3.充分利用各引擎的資源,減少資源閑
4、置;Flink Sql Gateway1.使用開源的Flink SQL Gateway 來作為SQL提交的入口;2.基于Flink 的zookeeper HA機制保障Flink 集群的可靠性;3.SQL Gateway 實時監聽zookeeper 的HA路徑,一旦Flink Cluster掛掉之后,YARN重新拉起新集群,SQL Gateway 可自動感知;Flink SQL查詢提交執行功能點:1.TaskManager 資源預先分配2.JobManager 異步解析Split,Split 邊解析任務邊執行3.Sink 算子接受到指定大小的結果數據后,即通知任務結束4.數據持久化,寫入到Hiv
5、e表穩定性性能監控Hive兼容1.支持Hive 語法&函數;2.語法兼容性80%1.異步解析Split,邊解析Split邊執行任務,減少split解析消耗的時間;2.Flink 集群預分配資源,減少資源申請的時間;3.控制提交時掃描文件或者Split的最大個數,減少并行設置所需時間;1.監控Olap 集群JM&TM內存,CPU使用2.監控Sql-Gateway內存使用,任務提交情況Flink Olap 功能增強1.使用zookeeper HA保證集群高可用2.Sql Gateway 自動感知存活的集群;3.控制返回數據量,控制掃描分區個數和數據量Onesql OLAP分析平臺成果入口收斂,減低
6、用戶使用門檻,執行出錯率下降85.7%收益收益一一OLAP任務執行成功率提高3.3%收益收益二二執行平均耗時縮短10%收益收益三三實時集群資源利用率提升15%收益收益四四實時數倉建設思路使用 Flink 計算指標和維度,寫入ClickHouse 寬表ClickHouse 事務機制,結合Flink 實現從Kafka 到ClickHouse 的端到端Exactly once建設一套實時任務管理的平臺,管理和監控實時任務的運行Click House寬表Exactly-Once 保證平臺化建設建設方案方案實施基于以上方案,將ABTest,日活監控等離線 計算任務遷移到 Flink 實時計算上,完成小時
7、/天的指標和維度計算;1.消息隊列kafka 存放原始打點時間數據;2.Flink 按照天、小時窗口聚合后,生成各個用戶的明細數據;3.明細數據按照UID與維表數據聚合后,生成多維明細數據,寫入ClickHouse;4.ClickHouse 進行匯總輸出,分析展示;遇到的問題遇到的問題#1數據從Kafka消費,計算后寫入ClickHouse,難以保證Exactly-once;復雜的計算邏輯(多流J&去重),狀態太大,作業背壓大,不穩定;流維表Join中,Hive維表較大,使用維表Join 功能,維表加載到內存后OOM;#2#3離線任務 改為 流式計算任務Select count(),sum()
8、from(Select a.uid,a.events,b.events,c.eventsfrom event_1 as a,event_2 as b,event_3 as c where a.uid=b.uidand b.uid=c.uid;)直接流表join,狀態太大多流UNION 代替 JoinSelect a.uid,a.events,b.events,c.eventsfrom event_1 as a,event_2 as b,event_3 as c where a.uid=b.uidand b.uid=c.uid;Select uid,events from(select*from
9、 event_1 Union allSelect*from event_2Union allSelect*from event_3)極大的減小了 Join 的大 State 帶來的影響狀態共享 Count Distinct 去重Select count(distinct if(eventsa=1,uid,null)as cnt1,count(distinct if(eventsb=1,uid,null)as cnt2count(distinct if(eventsx=1,uid,null)As cntxFrom table_aGroup by name多個Count Distinct 共用一個
10、Map State中的狀態,極大的減小了作業狀態的大小1.通過一個MapState 來記錄Group By中的多個Count Distinct的狀態;1)MapState的Key對應于去重的Key;2)MapState的Value是字節數組,字節數組的第x位表示第x個Count Distinct在對應的Key上的取值,0或1;2.當計算聚合結果時候,將MapState中所有Key的第x位相加,即為第x個Count Distinct的聚合的結果值。狀態共享 效果對比020040060080010001200140016001234567狀態大小count distinct 個數狀態共享-效果對比
11、狀態共享State無狀態共享State流維表Join select b.uid as uid2,a.os,a.session_idfrom kafka_source as a left join _dim_uid_infoFOR SYSTEM_TIME AS OF a.proctime as b on a.uid=b.uid;維表過大,任務OOM流維表Join select b.uid as uid2,a.os,a.session_idfrom kafka_source as a left join _dim_uid_infoFOR SYSTEM_TIME AS OF a.proctime a
12、s b on a.uid=b.uid;將維表數據按照key 分配到多個HashMap 中,或者使用RocksdbMap State來加載Hive大維表,降低了維表過大導致OOM的風險。BIGO ClickHouse 兩階段事務機制ClickHouse Sink Exactly-once語義1.寫雙副本,降低副本宕機導致數據丟失的風險;2.自動規避副本缺失的shard;3.兩次checkpoint間,JDBC 執行多次flush,checkpoint 成功時批量提交;優化成果使用Union all 代替join以及狀態共享機制后狀態控制在100G以內成果成果一一使用Rocksdb State成功
13、加載10億行+的大維表成果成果二二使用ClickHouse 事務機制,結合Flink 成功保證端到端exactly-once成果成果三三平臺化建設1.標準化,統一Flink 實時計算任務的接入,更易于管理;2.基于Flink 的一站式實時計算開發管理平臺 Bigoflow1)管理多個flink 版本的不同作業;2)提供 flink 作業啟動運行的各種功能;3.統一元數據管理,建立實時任務血緣關系SQL作業開發1.SQL作業編輯器2.語法檢查3.元數據管理4.參數設置拓撲展示&血緣關系SQL 作業可以直接在拓撲圖上設置各個算子的并行度,作業啟動后將按照設置的并行運行平臺化管理1.統一接入:支持F
14、link JAR,SQL,Python 等多種類型作業;共覆蓋實時ETL,實時推薦,機器學習,廣告,AB測試,實時監控 等多個業務2.一站式管理:集作業開發,提交,運行,歷史展示,監控,告警于一體,便于隨時查看作業的運行狀態 和發現問題;3.血緣關系:方便查詢每個作業的數據源,數據目的,數據計算的來龍去脈;#4 4Flink OLAP分析分析&實時數倉實時數倉 業務場景業務場景OLAP分析 業務場景 AdHoc 查詢實時數倉業務場景 ABTest多個流進行UNION后,按照天/小時/分鐘窗口根據UID聚合后,寫入kafka 結果表;與維表連接后,生成多維明細表,經過匯總后進行用戶留存分析,歸因分析 等AB測試功能#5 5未來規劃未來規劃1.完善Flink Olap 分析平臺,完善SQL語法支持,以及 解決計算過程中出現的JOIN數據傾斜 問題;2.完善實時數倉建設,引入數據湖技術,解決實時數倉中任務數據的可重跑回溯范圍小的問題;3.基于Flink打造流批一體的數據計算平臺;