《蔚來李宇彬-基于 Paimon 的實時湖倉實踐.pdf》由會員分享,可在線閱讀,更多相關《蔚來李宇彬-基于 Paimon 的實時湖倉實踐.pdf(31頁珍藏版)》請在三個皮匠報告上搜索。
1、基于 Paimon 的實時湖倉實踐演講人:李宇彬 資深工程師蔚來實時湖倉架構的演進Evolution of Real-Time Lakehouse Architecture01引擎底座實踐及增強Engine Practice&Enhancement02平臺化體系建設Platform Construction03未來規劃Work Plan04目 錄CONTENTS實時湖倉架構的演進Evolution of Real-Time Lakehouse Architecture實時湖倉架構的演進Evolution of Real-Time Lakehouse Architecture業務背景主數據營銷社
2、區服務用數字點亮未來銷售APP客服決策實時湖倉架構的演進Evolution of Real-Time Lakehouse Architecture傳統數倉-存儲與計算引擎耦合,易形成數據孤島-技術棧復雜,開發維護成本高-實時數倉存儲成本高,且中間數據不可查,難復用-離線數倉對事務、行級更新的支持度差-社區活躍度相對較低,bugfix、新特性支持慢痛點-支持partial-update、deduplicate等策略-支持豐富的cdc入湖功能,能向下游產生changelog存儲存儲層層流式語義,流式語義,減負計算減負計算-作為近實時kv存儲進行lookup-作為消息隊列進行流讀流寫-自動管理小文件
3、合并技術棧精簡技術棧精簡,降本增效降本增效-發起于國內,業務場景貼合,溝通無障礙-社區響應需求和迭代功能的速度快社區活躍高效社區活躍高效實時湖倉架構的演進Evolution of Real-Time Lakehouse ArchitecturePaimon 實時湖倉數據新鮮度:分鐘級流批一體流批一體-LSM 架構高吞吐低時延,支持點查,支持數倉分層,流批一體存儲-脫胎于實時引擎標準 Flink,流批一體計算高速高速 OLAP OLAP 查詢查詢-主鍵、列存、統計信息-zorder/hilbert聚簇-bloomfilter/bitmap索引-計算與存儲解耦-支持事務-支持行級更新湖倉特性湖倉特
4、性實時湖倉架構的演進Evolution of Real-Time Lakehouse ArchitecturePaimon 實時湖倉引擎底座實踐及增強E n g i n e P r a c t i c e&E n h a n c e m e n t引擎底座實踐Engine Practice&Enhancement桶策略優化桶是讀寫的最小存儲單元,會直接影響到讀寫性能引擎底座實踐Engine Practice&Enhancement引擎底座實踐Engine Practice&Enhancement引擎底座實踐Engine Practice&Enhancement數據訂正發生任務邏輯錯誤、運行異常
5、時,需要訂正數據-CALL sys.create_branch(default.T,branch1,tag1);-CALL sys.fast_forward(default.T,branch1);手動訂正1.批寫入默認分支,流寫入stream分支2.scan.fallback-branch=stream3.批讀當前分支時,若缺少分區會自動回退到stream分支限制條件:分區表;批讀周期離線訂正引擎底座實踐Engine Practice&Enhancement任務迭代業務場景中會遇到需要修改邏輯或升級paimon版本的情況consumer-id=myid安全讀取斷點續傳consumer.expi
6、ration-time=1 d防止數據無限膨脹邏輯迭代-從下游開始升版本-0.8升到0.9后,顯式指定 file.format版本迭代引擎底座實踐Engine Practice&Enhancement數據打寬數據打寬廣泛存在于數倉業務場景1.cache:模式:auto:僅支持主鍵關聯場景,按需加載緩存,資源消耗少,初始化更快;full:將數據全部load到rocksdb,初始化慢,支持場景多配置:lookup.continuous.discovery-interval 刷新間隔 lookup.cache-max-memory-size 緩存上限2.延遲重試:維表在一段時間的延遲更新,重試后被主
7、表關聯3.異步延遲重試:重試查找不到數據時,不阻塞后續數據關聯維表關聯merge-engine=partial-update 代替雙流join-減少大狀態算子的使用,不用擔心狀態過期影響結果準確性;-高吞吐,不易反壓,消耗資源少;-近實時級別的延遲;流式關聯缺點:無法處理維表更新后驅動關聯計算的場景引擎底座實踐Engine Practice&Enhancement實踐效果切換到 Paimon 后,數倉業務的資源開銷、運維成本、開發周期都有明顯的改善資源開銷 cpu下降約 40%內存下降約 30%替換了 Hbase 等組件的昂貴存儲資源運維成本 檢查點穩定性提升,任務回刷次數大幅降低,運維時間降
8、 50%以上 鏈路精簡,釋放運維成本,工作幸福度提升開發周期 簡化研發流程,降低開發門檻 流式存儲語義降低了計算側的調優壓力引擎底座增強Engine Practice&Enhancement謂詞下推 收益收益:加速獲取表結構元數據,減輕存儲底座負擔 案例案例:過濾schema_id查詢一個3000 schema文件的表,耗時由半小時降到數秒 入口方法:入口方法:SystemTableLoader#loadhttps:/ 支持 schemas 系統表謂詞下推引擎底座增強Engine Practice&Enhancement部分更新 https:/ partial-update.remove-re
9、cord-on-sequence-group 支持收到特定 sequence group 的 delete 消息后觸發物理刪除 收益收益:擴展了 partial-update 的適用場景,之前只支持忽略 delete 消息,或者任一上游的 delete 都可刪整行 案例案例:業務系統中試駕單的試駕人變動(張三和李四-李四),體現到試駕寬表的物理刪除,其他流的變動不會觸發物理刪除 入口方法:入口方法:PartialUpdateMergeFunction#add引擎底座增強Engine Practice&Enhancement動態桶 https:/ 收益收益:避免桶數無限增長,小文件數量不可控導致
10、的穩定性、性能風險 分配桶的入口方法:分配桶的入口方法:HashBucketAssignerOperator#initializeState引擎底座增強Engine Practice&Enhancement持續集成CICD 提升代碼質量,加速功能迭代背景:CI 運行周期較長影響迭代效率,配置文件復雜影響可維護性kafka 容器引入 KRaft,移除對 zk 的依賴 https:/ 等依賴 kafka 容器的 e2e 測試經常超時失敗,優化后 kafka 容器的拓撲復雜度降低,提升了性能和穩定性,e2e 異常明顯減少重構 github-workflows 模塊https:/ 引入 strateg
11、y.matrix strategy.matrix 策略矩陣策略矩陣統一高度相同的 ci workflow;只編譯必要的模塊;提升非 e2e 測試并行度收益:-strategy.matrix 簡化了修改復雜度提高了可維護性;并行執行提升了持續集成效率-ci workflow 數由 20 降到 8,減少 60%-平均整體運行周期由 53 分鐘降到 41 分鐘,減少 23%引擎底座增強Engine Practice&Enhancement持續集成支持 jdk11 環境集成測試背景:1.jdk11 ci 異常;2.Flink 當前穩定版推薦使用 jdk11;3.jdk11 在垃圾回收、性能、安全性、語
12、言使用層面有大的提升升級 hiverunner、tez 版本和用法,支持在 jdk11 環境集成測試 paimon-hive 模塊 https:/ 模塊的 jdk11 支持能力得以驗證,其所在的 UTCase and ITCase Others on JDK11 整條 workflow 的數百個用例能完整跑通調整容器版本,支持在 jdk11 環境集成測試 e2e 模塊https:/ 的 jdk11 支持能力得以驗證,其所在的 End to End Tests Flink on JDK11 整條 workflow 的數十個用例能完整跑通平臺化體系建設P l a t f o r m C o n s
13、 t r u c t i o n-基于系統表獲取內置元數據-配置表屬性,加入自定義元數據元數據可見元數據可見性性基于Paimon cdc包-schema evolution-一鍵入湖數據易接入數據易接入性性平臺化體系建設Platform Construction存儲底座穩定性存儲底座穩定性Prometheus 監控存儲底座-實時指標:namespace 粒度的文件數配額、存儲空間占用百分比-T+1指標:表粒度的文件數配額、存儲空間、最近修改時間、任務負責人/鏈接/運行狀態上線后一個月內已累積清理 60 多個無效表,節省了 15 tb 存儲空間,150 多萬個文件配額數據產出準確性數據產出準確性
14、流轉可觀測性流轉可觀測性數倉平臺數倉平臺平臺化體系建設Platform Construction數據產出準確性依賴于任務邏輯正確、任務運行正常、保底機制任務邏輯正確:遵循 PDCA 循環(Plan-Do-Check-Act)原則,強調通過持續的規劃、執行、檢查和演進來實現目標的優化與改進;技術、業務專家制定完備的最佳實踐規范規劃開發人員根據規范完成業務開發;編寫并通過 e2e 集成測試執行技術、業務專家把關代碼評審和簽字確認后上線;確定關鍵質量指標項和閾值檢查根據社區動態、業務反饋即時更新最佳實踐規范演進任務運行正常:通過檢查點、反壓、延遲產出告警保證;數據產出校準:對于重點且高穩定性要求的任
15、務,通過自研質量平臺進行周期性地檢查,主動發現質量問題并自動修正;平臺化體系建設Platform Construction流轉可觀測性背景:實時鏈路就像一個復雜的動態交通網絡,當前流計算任務的運行過程是一個黑盒流框架如 Flink 提供了易用性的同時,封裝了非常多的技術細節,流式任務的特性決定了難以提前發現問題(性能/正確性等),且遇到問題后難以排查,因此實時觀測元素級別的數據流動是很有價值的數據現場難以復現,特定問題的出現依賴于特定流量壓力、某條異常數據等;計算鏈路更加復雜,運行結果受流式關聯、窗口、水印影響,提高了開發、排查門檻;平臺化體系建設Platform Construction流轉
16、可觀測性使實時數據流由黑盒變成白盒,方便快速分析運行邏輯、定位性能瓶頸、排查數據異?;?java agent 注入機制,選型 ByteBuddy 框架插樁 Flink 算子關鍵方法,實現了全鏈路精細化監控 部署維護:平臺無感知、業務無侵入;適用任務:因為是 DAG 算子級別的插樁,因此對 SQL、JAR 任務都適用;監控粒度:subtask 粒度,Flink 任務執行的最小單元;平臺化體系建設Platform Construction流轉可觀測性插樁 Flink 算子的關鍵方法類類名名方法方法名名用途用途ExecNodeBasetranslateToPlan插樁提取 sql 算子的字段信息T
17、ransformationgetInputs獲得當前算子的直接前向算子getOutputType獲得當前算子的輸出類型、字段列表SinkTransformationTranslatortranslateFor 插樁提取 sink 復合算子的字段信息和真實 vertexIdExecutionConfigsetGlobalJobParameters保存解析結果到全局配置,方便算子在運行時找到對應的字段列表StreamConfiggetTypeSerializerIn獲得TypeSerializer序列化器StreamSourceContexts$SwitchingOnClosecollect 插樁
18、 datagen 等連接器,生成流元素SourceOutputcollect 插樁 kafka 等第三方連接器,生成流元素AbstractStreamOperatorsetKeyContextElement 插樁提取輸入數據ChainingOutputpushToOperator插樁提取輸出數據序列化后續源頭平臺化體系建設Platform Construction流轉可觀測性觀測到的 metric 具有豐富的維度:所屬任務、算子類/方法/名稱/id、發生時間點、字段列表、數據詳情觀測 kafka sink 算子字段名字段名數據類型數據類型字段含義字段含義job_idStringflink任務
19、idtask_idString業務任務 id,默認是數據平臺的任務 idclazzString算子的類method_nameString算子調用的方法operator_nameString算子名operator_idString算子idvertex_idBiginttask idsubtask_idBigintsubtask idtsBigint發生時間點data_formatString數據所屬 java 類的全限定名row_kindString數據的 cdc 類型field_namesString字段列表trace_fieldsString提取哪些字段作為 traceIdtrace_idS
20、tring提取的 traceIddataString數據詳情gen_trace_idBigint注入的 traceId job_idjob_id:f55a130602064b2f3bb9d687b4300ec1f55a130602064b2f3bb9d687b4300ec1,task_idtask_id:523401523401,clazzclazz:SinkWriterOperatorSinkWriterOperator,method_namemethod_name:setKeyContextElement1setKeyContextElement1,operator_nameoperato
21、r_name:kafka_sink3:kafka_sink3:WriterWriter,operator_idoperator_id:ba40499bacce995f15693b1735928377ba40499bacce995f15693b1735928377,vertex_idvertex_id:4 4,subtask_idsubtask_id:0 0,tsts:17273420332891727342033289,data_formatdata_format:org.apache.flink.table.data.GenericRowDataorg.apache.flink.table.
22、data.GenericRowData,row_kindrow_kind:INSERTINSERT,field_namesfield_names:id,name,_gen_trace_idid,name,_gen_trace_id,trace_fieldstrace_fields:idid,trace_idtrace_id:22,datadata:id:2,name:liyubin,_gen_trace_id:1id:2,name:liyubin,_gen_trace_id:100,gen_trace_idgen_trace_id:10102024-9-26 17:13:53未來規劃Work Plan引入 Fluss湖流一體,提升 Paimon 時效性引入 Flink 物化表簡化批處理和流式數據管道,提供一致的開發體驗,降低業務開發門檻替換消息接入層 Kafka逐步替換 mq,降低成本增強數據訂正支持支持增量訂正未來規劃Work Plan引擎加強血緣建設提升問題源頭排查效率;提升任務迭代速度和穩定性;減少無效鏈路,加強數據復用;未來規劃Work Plan加強權限建設更易配置;全面審計;引入 Gravitino 服務元數據統一訪問,不再強依賴 HMS平臺感謝大家用心觀看演講人:李宇彬 資深工程師謝謝觀看