湖倉分析|浙江霖梓基于 Doris + Paimon 打造實時/離線一體化湖倉架構

導讀:浙江霖梓早期使用 CDH 產品套件搭建了大數據系統,面臨業務邏輯冗余、查詢效率低下等問題,基于 Apache Doris 進行整體架構與表結構的重構,并基于湖倉一體和查詢加速展開深度探索與實踐,打造了 Doris + Paimon 的實時/離線一體化湖倉架構,實現查詢提速 30 倍、資源成本節省 67% 等顯著成效。

浙江霖梓是一家專注于深度學習和人工智能應用的金融創新企業,自 2018 年成立以來,專注于深度學習和??智能的應? ,通過構建數據迭代能?形成結構化的數據決策產品,為企業提供精準經營決策。同時,提供基于大數據的風控能力的一系列高效便捷的金融服務產品。

然而,隨著業務的持續擴展,大數據業務系統的局限逐漸暴露:報表系統計算緩慢、運維成本持續攀升、組件間的高度耦合導致架構穩定性較差等,嚴重影響了大數據系統產出效率,因此浙江霖梓引入 Doris+Paimon 重新構建了實時/離線一體化湖倉架構,為反欺詐策略、用戶?為分析、BI 應用等若干系統提供了高效準確的服務,實現了查詢提速 30 倍、資源成本節省 67% 等顯著成效

早期架構及痛點

下圖是早期的 CDH 架構示意圖,MySQL 數據通過 Sqoop 全量導入至 Hive,埋點數據通過 Java 程序清洗后進入 Flume 的 source 端,并最終 sink 到 Hive 的分區表中,離線數倉任務的 ETL 由 Hive 執行,批處理作業則通過 Spark SQL 運行,所有任務都從 ODS 層出發直接進入到 APP 層。數據開發與分析工作則依賴 CDH 自帶的 Hue 平臺,任務調度依賴 easyScheduler,最終與自主研發的報表平臺對接,實現數據的可視化。

早期架構及痛點.PNG

隨著業務擴展,早期架構的局限逐漸暴露:數據采集、變更及分析效率低下的同時,整體運維成本也在持續攀升,并且各組件間的高度耦合降低了架構的整體穩定性。此外,由于各部門未統一指標?徑,不同取數邏輯的分析結果存在較大差異,使得業務痛點的精準定位變得異常困難,傳統的 Hive+BI 系統已無法滿足需求。

為了解決上述痛點,浙江霖梓考察了市?上較為常?的大數據分析組件,如 HBase、ClickHouse、Apache Doris 等,最終從查詢性能、寫入性能、投?成本等??評估,最終選擇了綜合實??常突出的 Apache Doris。以下為前期技術選型調研結果:

早期架構及痛點-2.PNG

相較于其他產品,Apache Doris 的核心優勢如下:

  • 查詢快:?持物化視圖和向量化執?引擎,并?持多種表模型以及 Rollup 、BloomFilter、倒排索引等,離線跑批速度非常快,并對查詢性能有顯著加速效果。
  • 存儲省:通過表的優化和冷熱數據分層特性,能夠充分利用機械盤和固態盤,顯著提升資源利用率。此外,采用高效的 ZSTD 壓縮算法,壓縮比高達 10 倍,大幅降低了存儲費用。
  • 運維簡單:不依賴外部系統, 原架構一旦某個服務發生異常,與其關聯的服務都會受到影響,給運維增加了難度。? Apache Doris 的原生運維工具 Doris Manager 可以滿??常絕?多數的運維需求,再加上 Doris 架構簡單且不存在??件問題,在線擴展節點十分方便,??降低了運維難度。
  • 便捷遷移:兼容 MySQL 協議,報表系統只需要修改源配置就可以輕松對接。
  • 社區活躍:Apache Doris 的社區?常活躍,技術團隊解決問題的能?較強;版本迭代速度快,能很好的解決業務痛點。

基于 Apache Doris 的實時/離線一體化湖倉架構

基于 Apache Doris 的實時:離線一體化湖倉架構-1.PNG

經過七個月的設計與實施,最終完成了基于 Apache Doris 離線 / 實時一體化湖倉統一架構。如上圖所示,離線數據通過 DataX 同步、實時數據通過 Flink CDC 采集加工,這些數據最終存儲到 Doris 或 Paimon 表格式中。

目前基于 Paimon 的全量數據入湖還在持續完善,原先的部分離線數據通過 Flink CDC 實時入湖,而另一部分會直接進入 Doris 來縮短數據鏈路。這些數據經由 Doris 統一分析處理后,最終服務于自研數據服務。在這其中,Doris 集群被靈活拆分為多個資源組,分別滿足離線數倉、數據集市、實時業務監控等不同上游服務的數據處理與分析需求。Apache Doris 的引入,也帶來許多顯著收益:

  • 查詢效率提升:Hive ?對復雜的?數據量跑批任務時,耗時往往超過 20min,億級別的?表 Join 甚至需要花費 35-50min,? Apache Doris 在未經優化的初次跑批中耗時 7min ,經過基礎優化后縮減至 40s-90s,查詢速度提升近 30 倍。
  • 開發效率提高:原架構使用 Spark 進行 ETL 之后導入數倉,業務開發需要結合 Spark、Hive、Kafka 等多組件;切換至 Doris 后,只需專注 Doris SQL 的開發與優化,開發工作大大簡化。此外,Doris 與 Kafka、DataX、Flink 等組件兼容性較高且包含豐富的插件庫,進一步提高了開發效率。
  • 負載隔離:利? Workload Group 、Resource Group 等配置代替 Yarn,實現更加合理的資源隔離。
  • 更低使用成本:依賴 Doris 極致的壓縮與計算性能,原架構的 27 臺服務器精簡至 10 臺左右,總體資源開銷降低至原來的 1/3(節省了 67%),為?后 PB 級別的數據量提供了更優的成本方案。
  • 運維更加便捷:通過 Doris Manager 輕松部署和接管 Doris 集群,實時查看集群的運行狀態和詳情,快捷地對集群進行擴縮容、升級及重啟操作,數據管理更流暢、更高效。

詳細可參考 Doris Manager 介紹文檔與安裝手冊

架構升級實踐與調優

01 數據接?

  • 離線數據處理:將 Sqoop+Flume 替換成 DataX,并新增了 Data X Doris Json 一鍵生成功能,利用主鍵模型的 Replace 特性,將全量同步優化為增量同步。改造后,數據采集時間從原來的 5h 縮短至 1.5h,處理效率提升 70%。
  • 第三方埋點數據:之前需要通過大數據后端項目的接口 ETL 后傳輸到 Flume,改造后,ETL 邏輯依靠 Doris 實現,以 StreamLoad 的方式直接接入埋點數據。
  • 后端日志數據遷移:由于后端日志打印頻繁,MySQL 存儲壓力較大,影響業務分析效率。改造后通過 Routine Load 對接 Kafka 消費日志數據,并設置了 TTL,此外還根據業務開發側的需求進行了簡單的數據清洗,實現高性能的日志檢索功能。
  • 風控業務的實時命中策略與反欺詐實時指標處理:Flink 負責將 ETL 處理后的數據寫入 Paimon,通過結合 Doris 的湖分析能力接入 Paimon,憑借 Doris 的統一查詢入口為業務決策系統和數據分析提供數據服務。這一優化確保了業務問題能夠迅速被發現并解決,有效避免了以往 T+1 數據模式下因數據滯后和業務感知延遲所帶來的問題。

02 基于 Doris 的數倉建模

在構建新架構的同時,對數據表也進行了深度重構。基于 OneData 理論和 Apache Doris 的表模型設計,我們從底層建表邏輯出發,精心整理了以下內容,現與大家分享:

ODS 貼源層:使用主鍵模型備份 MySQL 的原始數據,可以接受 MySQL 歷史數據的物理刪除,從?減輕業務壓?,降低云上存儲成本。

DWD 明細層:主要使用主鍵模型,為了確保明細數據的準確性,也可以采用其他模型進行校驗。在此層將屏蔽 ODS 層的數據,以提高數據表的復用性。

DWS 匯總層:采用聚合模型來匯集不同維度的表數據,形成若?張 Base 表,后續基于 Base 表進?維度上卷或 BI 分析,使 SQL 語句更加簡潔、批處理性能得到提升。

APP 報表層:對接報表系統并定期通過郵件或辦公軟件發送至業務?,以供業務監控與業務決策。 由于該層涉及到基于不同時間字段維度以及維度上卷,因此選用明細模型。

02 基于 Doris 的數倉建模.png

重構后的數據表結構更加簡潔,顯著提升了 SQL 語句的可讀性,也使得數據同步性能,有效減輕了大規模數據全量同步所帶來的沉重負擔,從而避免業務阻塞。

03 結算系統數據回流

早期業務結算系統的核心數據難以復用,資源浪費的同時,數據批處理的效率也較為低下。引入 Doris 后,基于 Doris 的數倉建模復用了 DM 層的數據,有效支撐了結算代償、回購對賬、賬戶管理等核心業務需求的及時處理。此外還接入了風控決策引擎,為其提供了實時反欺詐數據指標,實現了高效實時計算和核心數據回流。

得益于 Doris 出色的即席查詢和實時寫入能力,數據回流的調度執行耗時平均不超過 2 秒,業務系統的靈活性和數據響應速度相比之前提高了 8-12 倍。

03 結算系統數據回流.png

04 資源管理與權限控制

改造初期,由于資源管理配置不當,集群性能未達預期,可以通過調整 Workload Group 的并?查詢數量、等待隊列容量和超時時間,避免多條 SQL 語句搶占資源從?降低集群整體性能,此外,調整 Workload Group 的 max_concurrencymax_queue_sizequeue_timeout 等參數,避免查詢超時。

Workload Group 相關數據開發的邏輯概念如下:

04 資源管理與權限控制.png

05 基礎性能優化項

早期架構由于缺乏系統性的架構設計理論依據,導致了組件開發與維護工作十分復雜,既未設置合理的數據分區,也未對存儲效率、查詢索引等數據管理機制進行合理規劃,所以在升級成為新架構時,浙江霖梓全面梳理并提煉業務關鍵指標,并針對 Doris 的各項基礎性能進一步優化,有效提高了離線 / 實時一體化數倉的數據處理效率。

分區分桶

在建表時設置合理的分區分桶字段,其??根據業務查詢時間區間與數據體量決定,原理與 Hive 分區分桶基本—致,需要注意的是,業務變更頻率較?的場景,不建議使??動分區。我們綜合考慮表數據量、增?趨勢、表使??法等情況,設置了動態分區,建表示例 SQL 如下:

PARTITION BY RANGE(k1) () 
DISTRIBUTED BY HASH(k1) 
PROPERTIES 
( "dynamic_partition.enable" = "true", "dynamic_partition.time_unit" = "DAY", "dynamic_partition.start" = "-7", "dynamic_partition.end" = "3", "dynamic_partition.prefix" = "p", "dynamic_partition.buckets" = "32" 
); 

前綴索引

Apache Doris 的前綴索引屬于稀疏索引,表中按照相應的?數的數據構成—個邏輯數據塊( Data Block),每個邏輯數據塊在前綴索引表中存儲—個索引項,其?度不超過 36 字節,查找前綴索引表時,可以幫助確定該?數據所在邏輯數據塊的起始?號。由于前綴索引內存占?較?,可以全量在內存緩存,并快速定位數據塊。設計原則?般遵循:<時間字段> + <分桶鍵> + <主鍵 id> ,對于 ODS 表, 要確保這些字段不存在 NULL 值 ,否則會導致輸出數據不?致。

倒排索引

主要?于規則明細表與?志表中,?于快速統計規則路由情況以及關鍵詞出現頻次,減少資源占?率。Table 中的?對應?檔、列對應?檔中的某個字段,可以根據關鍵詞快速定位其所在?,達到 WHERE ?句加速的?的。

BitMap 去重

BITMAP 類型的列可以在 Aggregate 表、Unique 表或 Duplicate 表中使? ,針對—些特定的場景如 UV 、規則命中次數進?查詢加速。SQL 示例如下:

#建表 
create table metric_table ( dt int, hour int, device_id bitmap BITMAP_UNION 
) 
aggregate key (dt, hour) 
distributed by hash(dt, hour) buckets 1 
properties( "replication_num" = "1" 
); 
#查詢 
select hour, BITMAP_UNION_COUNT(pv) over(order by hour) uv from( select hour, BITMAP_UNION(device_id) as pv from metric_table -- 查詢每?時的累計UV where dt=xxx 
group by hour order by 1 
) res; 

開啟執行優化器

在 Doris 2.1.x 版本中,建議啟用 Pipeline X 和 local shuffle,以進一步提升復雜查詢的執行效率。經過壓測,開啟 Pipeline X 優化器之后,性能提升了 20-30%。以下是 Pipeline X 優化器開啟狀態確認步驟:

#查看新優化器是否開啟
#確保值全為true 
show variables like '%enable_nereids_dml%'; 
show variables like '%experimental_enable_nereids_dml_with_pipeline%'; 
show variables like '%experimental_enable_nereids_planner%'; 
#默認 30,根據實際情況調整 
show variables like '%nereids_timeout_second%'; 

此時對 Doris 、Hive 、Spark 進行壓測,具體是對 15 個大表執行 join 操作,每張大表的平均數量約 13 億條,測試過程中還涉及了 2 個表之間的笛卡爾積計算。根據執行結果,Doris 平均耗時只需 6 分鐘。相比之下,Hive 執行相同任務耗時長達 2 小時,而 Spark 則執行失敗。

報表優化

ADS 報表層在建表時開啟 Merge-On-Write,以提升報表數據響應性能,同時開啟?列混存以及查詢緩存,避免刷新導致靜態數據重復查詢,影響集群性能。

#開啟?存
"store_row_column" = "true" 

總結與規劃

截至目前,基于 Doris + Paimon 的實時/離線一體化湖倉架構已為反欺詐策略、用戶?為分析、業務監控、 BI 應用等若干系統提供了服務,實現查詢提速 30 倍、資源成本節省 67% 等顯著成效。未來,浙江霖梓將持續擴大 Apache Doris 在內部系統的使用范圍,并將對數據湖能力、智能實時應用進行探索及應用:

  • 全面接入數據湖:逐漸擴大 Doris + Paimon 湖倉?體化架構的應用范圍,打通存量數據湖與 Doris 數倉的對接,為日后 PB 級數據的分析做好充分準備。
  • 打造實時智能金融客服:推動 Doris App 報表豐富度的提升,將 Doris 數據導出到 Elasticsearch 做知識庫并接入?模型,通過 Prompt 與 GraphRAG 增強智能檢索落地智能?融問答系統。
  • 打造智能營銷系統:將 Doris 作為知識庫做實現精準營銷,節約人力并且降低?為決策誤差,深度挖掘數據潛在價值。

最后,衷?感謝 SelectDB 與 Apache Doris 社區伙伴的相攜相伴,我們也會基于 Doris 進?離線 / 實時湖倉構建中持續挖掘,力求找到更優的問題解決方案,并回饋至社區。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895517.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895517.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895517.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git bash在github的庫中上傳或更新本地文件

一、將本地文件上傳到 GitHub 倉庫 1. 創建 GitHub 倉庫 如果你還沒有在 GitHub 上創建倉庫&#xff0c;首先需要創建一個新的倉庫&#xff1a; 登錄到 GitHub。點擊右上角的 按鈕&#xff0c;選擇 New repository。給你的倉庫起個名字&#xff0c;并選擇 Public 或 Privat…

Jmeter壓測怎么控制TPS

壓測固定TPS的接口 有些任務需要我們控制接口的TPS&#xff0c;例如每秒請求一次。 TPS定時器 然后1個并發持續運行 壓測結果 需要注意TPS在1.0/s左右&#xff0c;有時可能是1.2、1.3&#xff0c;定時器會自動調整壓力&#xff0c;讓TPS保持在1.0左右。

ArcGISPro 新建shp+數據結構

import arcpy# 設置工作空間和 Shapefile 存放路徑 shp_path r"C:\path\to\your\folder\PolygonZY.shp" # Shapefile 存放路徑 fields [("CHBH", "TEXT", 20),("ZCMC", "TEXT", 100),("ZCLX", "TEXT"…

理解WebGPU 中的 GPUAdapter :連接瀏覽器與 GPU 的橋梁

在 WebGPU 開發中&#xff0c; GPUAdapter 是一個至關重要的對象&#xff0c;它作為瀏覽器與 GPU 之間的橋梁&#xff0c;為開發者提供了請求 GPU 設備、查詢 GPU 特性以及獲取適配器信息的能力。本文將詳細介紹 GPUAdapter 的核心屬性和方法&#xff0c;并通過實際代碼…

信呼OA辦公系統sql注入漏洞分析

漏洞描述 信呼OA辦公系統uploadAction存在SQL注入漏洞&#xff0c;攻擊者可利用該漏洞獲取數據庫敏感信息。 環境搭建 源碼下載地址&#xff1a;https://github.com/rainrocka/xinhu 下載后解壓到本地網站根目錄下&#xff0c;配置好數據庫&#xff0c;然后安裝即可 默認密…

vue框架生命周期詳細解析

Vue.js 的生命周期鉤子函數是理解 Vue 組件行為的關鍵。每個 Vue 實例在創建、更新和銷毀過程中都會經歷一系列的生命周期階段&#xff0c;每個階段都有對應的鉤子函數&#xff0c;開發者可以在這些鉤子函數中執行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分為以下幾…

一文深入了解DeepSeek-R1:模型架構

本文深入探討了 DeepSeek-R1 模型架構。讓我們從輸入到輸出追蹤 DeepSeek-R1 模型&#xff0c;以找到架構中的新發展和關鍵部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架構。本文旨在涵蓋其設計的所有重要方面。 &#x1f4dd; 1. 輸入上下文長度 DeepSeek-R1的輸入上下文長…

開發基礎(8):鴻蒙圖表開發

mpchart mpchart是一個包含各種類型圖表的圖表庫,主要用于業務數據匯總,例如銷售數據走勢圖,股價走勢圖等場景中使用,方便開發者快速實現圖表UI,mpchart主要包括線形圖、柱狀圖、餅狀圖、蠟燭圖、氣泡圖、雷達圖、瀑布圖等自定義圖表庫。 柱狀圖 導入import {BarChart, …

條款03:盡可能使用 const

const 允許我們指定一個語義約束&#xff0c;使某個值應該保持不變 1、const 修飾 變量&#xff0c;指針&#xff0c;函數&#xff0c;函數返回值等&#xff0c;可以使程序減少錯誤&#xff0c;或者更容易檢測錯誤&#xff1a; 指針常量&#xff1a;int* const p;//指針地址不…

算法兵法全略(譯文)

目錄 始計篇 謀攻篇 軍形篇 兵勢篇 虛實篇 軍爭篇 九變篇 行軍篇 地形篇 九地篇 火攻篇 用間篇 始計篇 算法&#xff0c;在當今時代&#xff0c;猶如國家關鍵的戰略武器&#xff0c;也是處理各類事務的核心樞紐。算法的世界神秘且變化萬千&#xff0c;不夠賢能聰慧…

開關電源實戰(一)寬范圍DC降壓模塊MP4560

系列文章目錄 文章目錄 系列文章目錄MP4560MP4560 3.8V 至 55V 的寬輸入范圍可滿足各種降壓應用 MOSFET只有250mΩ 輸出可調0.8V-52V SW:需要低VF肖特基二極管接地,而且要靠近引腳,高壓側開關的輸出。 EN:輸入使能,拉低到閾值以下關閉芯片,拉高或浮空啟動 COMP:Compens…

微軟AutoGen高級功能——Magentic-One

介紹 大家好&#xff0c;博主又來給大家分享知識了&#xff0c;這次給大家分享的內容是微軟AutoGen框架的高級功能Magentic-One。那么它是用來做什么的或它又是什么功能呢&#xff0c;我們直接進入正題。 Magentic-One Magnetic-One是一個通用型多智能體系統&#xff0c;用于…

DeepSeek是如何通過“蒸餾”技術打造自己的AI模型

1 引言&#xff1a; 最近&#xff0c;外媒對中國公司——DeepSeek進行了猛烈抨擊&#xff0c;指控其采用了所謂的“蒸餾”&#xff08;Distillation&#xff09;技術&#xff0c;涉嫌抄襲甚至作弊。那么&#xff0c;什么是“蒸餾”技術&#xff1f; 在人工智能領域&#xff0c;…

【廣州大學主辦,發表有保障 | IEEE出版,穩定EI檢索,往屆見刊后快至1個月檢索】第二屆電氣技術與自動化工程國際學術會議 (ETAE 2025)

第二屆電氣技術與自動化工程國際學術會議 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大會官網&#xff1a;http://www.icetae.com/【更多詳情】 會議時間&#xff1a;2025年4月25-27日 會議地點&#xff1a…

伯克利 CS61A 課堂筆記 08 —— Strings and Dictionaries

本系列為加州伯克利大學著名 Python 基礎課程 CS61A 的課堂筆記整理&#xff0c;全英文內容&#xff0c;文末附詞匯解釋。 目錄 01 Strings 字符串 Ⅰ Strings are An Abstraction. Ⅱ Strings Literals have Three Forms Ⅲ String are Sequences 02 Dictionaries 字典 …

基于 GEE 計算研究區年均地表溫度數據

目錄 1 代碼解析 2 完整代碼 3 運行結果 1 代碼解析 &#xff08;1&#xff09;定義研究區&#xff1a; // 研究區的范圍需要自己提前上傳 var dataset table;// 將研究區顯示在中心&#xff0c;后面的數字為縮放等級&#xff0c;范圍從1 - 24 Map.centerObject(dataset,…

docker compose快速部署kafka-connect集群

先部署kafka集群&#xff0c;啟動 參考&#xff1a;docker compose部署kafka集群-CSDN博客 創建timezone文件&#xff0c;內容填寫Asia/Shanghai 再部署kafka-connect集群 networks: net: external: true services: kafka-connect1: restart: always image:…

Hutool - BloomFilter:便捷的布隆過濾器實現

1. 布隆過濾器簡介 布隆過濾器&#xff08;Bloom Filter&#xff09;是一種空間效率極高的概率型數據結構&#xff0c;用于判斷一個元素是否存在于一個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的算法&#xff0c;但缺點是有一定的誤判率&#xff0c;即判斷元素存在…

日常知識點之遺留問題梳理(定時器/時間輪定時器)

1&#xff1a;簡單基礎 定時器的核心知識點&#xff0c;對我來說就是獲取當前時間和設置回調函數。 簡單練習&#xff1a; ? c語言通過gettimeofday 獲取當前時間并進行處理 ? 回調函數的定義&#xff08;函數參數有必要適當存儲&#xff09; typedef void(Timerfunc)(vo…

Python + WhisperX:解鎖語音識別的高效新姿勢

大家好&#xff0c;我是烤鴨&#xff1a; 最近在嘗試做視頻的質量分析&#xff0c;打算利用asr針對聲音判斷是否有人聲&#xff0c;以及識別出來的文本進行進一步操作。asr看了幾個開源的&#xff0c;最終選擇了openai的whisper&#xff0c;后來發現性能不行&#xff0c;又換了…