基于 Flink+Paimon+Hologres 搭建淘天集團湖倉一體數據鏈路

摘要:本文整理自淘天集團高級數據開發工程師朱奧老師在 Flink Forward Asia 2024 流式湖倉論壇的分享。內容主要為以下五部分:

1、項目背景

2、核心策略

3、解決方案

4、項目價值

5、未來計劃

01、項目背景

1.1 當前實時數倉架構

當前的淘天實時架構是從日志服務器和業務數據庫采集數據,實時數據采集到 TT (消息隊列中間件,對標 Kafka)中,離線數據采集到盤古存儲中;在公共層會啟一個流批任務做流批計算,實時運行流任務,定時調度批任務;在計算層,實時和離線數據會寫到 Hologres(OLAP 組件)中,服務層的數據產品會基于 Hologres 表做數據產品的搭建和數據看板的展示。可以看到,數據直接從 DWD 層寫到 ADS 層,沒有實時的DWS層,因為TT 不支持去重,Kafka 同樣如此。我們希望有一個流批一體的統一存儲組件,能把實時的 DWS 層建設好,并且公共層數據可見。

1.2 業務訴求與核心痛點

img

2024年初以來,業務方主要有兩個訴求,第一個是希望有更多的實時數據產品,第二個是業務 BI希望自定義的數據分析。這兩個訴求對流批數據開發效率提出一個很大的挑戰。當前流批數據鏈路的核心痛點,第一,流批存儲不統一,實時是 TT,離線是 ODPS;第二,實時數據的可見性差,TT 數據對于用戶不可見,TT 里面每一條數據都是一條字符串,業務無法直接基于字符串進行 OLAP 分析,雖然TT數據可以導出到離線分析,但數據時效性會降低到小時級或天級,并且有開發成本;第三,沒有實時 DWS 中間層;第四,中間的流批一體開發效率比較低,推廣比較困難,相關的工具化也比較弱;第五,沒有一個高效易用的分鐘級近實時數據加工方案。

02、核心策略

2.1 Paimon 技術引入

img

我們引入了Paimon 的技術,期望基于 Paimon 構建湖倉公共層的流批一體存儲,統一流批數據口徑,并且提高數據的可復用性。從系統架構角度,我們拿 Paimon 和 TT 做了對比,可以看到TT的性能可以達到 6000 萬每秒,這個是業務的峰值,非TT系統峰值。Paimon 底層是盤古 HDFS,對于非主鍵表峰值可達 4000 萬/秒,而主鍵表如 Page 日志,峰值可達 1200 萬/秒,雖然峰值比不上 TT,但對于業務已經夠用。穩定性方面,TT 用了很多年,幾乎沒有穩定性問題。Paimon 于今年開始使用,經歷了 618 和雙 11 大促等高并發場景,整體運行穩定。擴展性方面,TT 和 Paimon 都是分布式的架構,易擴展。TT 支持日志采集和數據的 Binlog 接入,Paimon 本身不具備這些功能,通過和FlinkCDC 結合可以支持這些功能。

img

從業務角度,當前 TT 的成本高,而Paimon 只收取存儲費用,實時訂閱不收費,存儲在 HDFS 中,成本相對較低;在時效性方面,TT 更優是毫秒級,Paimon 是分鐘級;TT 實時數據存儲和離線ODPS存儲,不是一個存儲組件,在建映射表時需要逐個字段對齊離線表和 TT 的 Schema,比較費時費力,Paimon是流批一體存儲,流批數據存儲在一張底表中,不需要對齊 Schema 和口徑,可以提高開發效率;TT不支持OLAP分析,Paimon 目前支持 Hive,Hologres OLAP分析和 Flink 查詢;TT 需要全量拉取數據反序列化,把數據解析出來再根據某個字段過濾,Paimon 支持分區的存儲,并且存儲的數據有 Schema,可以使用分區過濾,特別像一些回追數據、分流的場景,用 Paimon 只需要讀取分流或者當天對應的分區,不用回追更早的歷史數據,以達到非常精準的過濾。

2.2 Hologres 動態表技術引入

img

第二個技術是Hologres,我們使用 Hologres 動態表做倉的建設。基于 Hologres 構建全增量一體的數倉分層,提升流批一體開發的效率,降低資源消耗。Hologres 支持增量計算,分鐘級更新數據,可以滿足業務的近實時需求;支持 Serverless 執行,將Hologres批任務提交到一個極大的共享資源池,批數據調度和回刷極快,同時支持自動規避機器的熱點,顯著提升運維效率;湖倉一體是指 Hologres 已實現直接讀取 Paimon 的湖表數據,而數據湖本身具備開放性,可以實現高效的近實時的湖倉架構方案。

img

這是 Hologres 的一張圖,從最下面的數據源采集,采集完之后導入到存儲,在公共層用 Paimon 完成搭建后,在數倉的計算層主要用 Hologres 的增量更新和全量更新來計算,計算結果也會存儲在 Hologres 表中。基于Hologres 表做一些 OLAP 的查詢,在應用層服務于在線服務和 AI 大模型。

2.3 湖倉一體能力建設

img

img

湖倉一體的能力建設是指基于 Paimon 構建湖倉公共層,然后基于Hologres 構建全增量一體的湖倉分層,還包括湖倉流批一體的能力建設、豐富的應用場景以及相關的平臺保障能力的建設。

03、解決方案

3.1 公共層入湖方案架構

img

關于公共層入湖,首先做一個環境驗證,開始排期開發搭建鏈路,最后在雙 11 做大促驗證。公共層入口的范圍主要包括交易,日志、預售架構和流量通道等

img

img

Paimon 的一個功能是數據分支功能—Branch,離線表默認是存儲在 Master 分支,實時的 Paimon 表默認存儲在 RT 分支,對于下游的業務,透出的是同一張 Paimon 表,業務在使用這張表的時候,默認會讀 Master 分支,即離線數據。如果離線數據讀不到,會去 RT分支上讀實時的數據,可以解決實時數據延遲覆蓋離線數據的問題。同時,Paimon支持不同with表參數的能力。比如實時場景,可能需要一張去重表,離線場景,可能就只需要append表。

3.2 愛橙交易域公共層入湖

img

在愛橙的公共層入湖鏈路中,增量用 Flink 流任務消費 TT 寫到 ODS Paimon 表當中,全量任務用 Flink 批任務讀離線表,寫入 ODS Paimon 表中。架構圖最上面的是 TT,TT 會導到 ODPS 離線表中,然后會基于 Paimon 建PK表做數據去重。

3.3 愛橙流量域公共層入湖

img

img

愛橙的流量域相對于交易域,數據要大很多,并且流量域的場景也更加復雜。我們把流量域分成四種服務協議等級來做保障,分別是 SLA1 到 4。第一種支持實時和離線,時效性在五分鐘以內,和對應的 TT 完全對齊;第二種,實時表和離線表測會有一些差異,缺少反作弊過濾;第三種缺少一些反作弊的維表過濾還有排序相關的一些字段;第四種只支持離線,和對應的離線表完全對齊。

在流量域公共層的架構圖中,首先是數據采集,從前端埋點采集到服務端,然后寫到 TT 中,主要是用 Flink 做一些計算,分別寫到不同的 Paimon 明細表中。因為流量域的日志字段比較復雜,比如一張流量表當中有 100 個字段,可能有 95 個字段是實時產出的,有另外五個字段,像反作弊和排序的字段不能實時產出,就會起一條修復的鏈路,用離線去回補這五個字段,反作弊和排序只能在離線算。實時也會做去重的邏輯處理,最后的數據寫到 DWD 層的 Paimon 表中,下游業務會基于 Paimon 表來建設 Paimon 的 DWS 層。

3.4 淘天公共層入湖

img

然后是淘天公共層的入湖。淘天公共層的上游是愛橙,主要把交易域和日志域的公共層入湖,我們做的工作主要分三點。第一點,以前的交易實時公共層沒有去重,下游每一個 ADS 任務在消費 TT 的時候都要單獨做一次去重;我們把交易日志放在公共層用paimon去重,只需要去重一次,1次公共層去重抵得上N次ADS去重,收益非常高,Flink 比較難解的一個場景是去重的時候 State 如果過大任務會不穩定,這也有效提高了ADSFlink任務的穩定性;第二個是日志鏈路,之前全鏈路日志都沒有去重,這會產生一個問題,如果日志的實時任務重啟,對于下游的業務數據會重復,體現在數據產品上,如果上個小時對比昨天的數據增長 5%,下個小時差不多也增長 5%,但當前重啟的小時會增長百分之十幾。基于 Paimon 在公共層做日志去重,收益是不管任務重啟多少次,下游消費的數據都不會重復,都是exactly-once的語義。最后是數據的分區,Paimon 支持數據的分區,可以分區過濾數據后再消費,像一些分流的場景也可以把分流的 Tag 作為一個分區,下游消費的時候就不需要反序列化全量數據,只需要消費對應 Tag 的數據就可以,節省下游消費任務的計算資源。

3.5 基于 Hologres Dynamic Table 構建 ADS 近實時湖倉分層

img

img

我們基于 Hologres 的動態表來構建 ADS層近實時的湖倉分層。Hologres 的外表支持直讀DWS層 Paimon表,并且可以做分鐘級的增量計算和離線場景的批計算,數據會在 ADS 層做動態表的過濾,展開,聚合和計算,分為增量和批兩種方式,增量任務用獨占的本地集群運行,批任務會提交一個極大的共享資源池中,共享資源池按需收費,并且它的資源比較大,可以用整個集群的資源瞬時跑批任務,運行速度極快,計算結果存儲在動態表中,然后用Hologres 視圖拼接多個動態表字段,視圖的作用是方便展示和開窗計算 DTH 指標。業務基于 Hologres 表做讀寫分離,分為高保障的和業務自行保障兩個等級。業務在讀庫上搭建數據產品和數據服務。

Hologres 已經支持直讀 Paimon。之前如果業務 BI 有一些需求提過來,需要數據開發搭建一條完整的數據鏈路,在數據產品上展示;Hologres 支持直讀 Paimon 后,如果業務 BI 有一些比較自定義的需求,并且需求不是很復雜,他完全可以自己通過 Hologres 直讀 Paimon 的中間層DWS 表,自己做一些簡單的數據開發和分鐘級報表搭建,這樣可以極大的節省實時數據研發的成本。同時,對于 BI 的取數效率也是巨大的提高。

04、項目價值

img

  • 數據時效性提升:中間層產出效率提升,流量表產出時效提前40-60分鐘;
  • 實時開發運維效率提升:流批一體,實時開發和運維效率提升50%以上,開發驗證時長從5天->2天,回刷速度提高15倍;
  • 實時數據使用門檻下降:業務和BI同學獲取中間層分鐘級實時數據以支持臨時實時分析場景;
  • 成本下降:存儲換用更廉價的hdfs,實時dws建設可降低tt重復讀取成本和下游去重成本;

05、未來計劃

img

Paimon 表目前在雙 11 大促取得的效果比較好,后面會在集團內繼續大力推廣。第一部分是希望借助 Paimon 表的分 Bucket 存儲來解決拉取大ODPS維表 比較慢的問題。Flink 任務在重啟時,對于ODPS大維表, LookUpJoin算子是先拉取再過濾,全量數據會拉取多次,對于Paimon維表,LookUpJoin算子只拉取join key對應bucket的數據,全量數據只拉取一次,任務重啟時間從二三十分鐘提升到秒級。

第二個是希望借助 Paimon 的 Partial Update 解決雙流 Join 的問題。

img

第三個是希望在 Hologres 的全增量直讀湖基礎上,新增全增量的寫湖能力,主要是 Paimon 相關的和 OLAP 引擎的打通,也是增強的 Paimon 的開放性,擴展 Hologres 的動態表在近實時的湖倉分層應用的場景;第四個是希望后面探索用 Fluss 做流存儲的組件,希望可以用它代替像 Kafka,TT 等消息隊列組件;第五個,后面會沉淀新一代的湖倉數據架構,在集團內大范圍推廣。基于目前已經在 618 和雙 11 做的Paimon 探索,整體表現符合預期,甚至超出預期,在集團內已具備大范圍推廣基礎。

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

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

相關文章

SIGCHLD信號--補充

進程一章講過用wait和waitpid函數清理僵尸進程,父進程可以阻塞等待子進程結束,也可以非阻 塞地查詢是否有子進程結束等待清理(也就是輪詢的方式)。采用第一種方式,父進程阻塞了就不 能處理自己的工作了;采用第二種方式,父進程在處理自己的工作的同時還要記得時不時地輪詢一 下,…

即插即用!全新記憶回溯策略:一種元啟發式算法的進化更新機制,含完整免費MATLAB代碼

1. 簡介 元啟發式算法的搜索域總是不斷變化,這使得難以適應多樣化的優化問題。為了克服上述問題,提出了一種稱為記憶回溯策略(MBS)的進化更新機制,包括思維階段、回憶階段和記憶階段。總體而言,MBS的采用通…

Spring AI框架快速入門

??前言:在經歷了八個里程碑式的版本之后(M1~M8),Spring AI 1.0 正式版本,終于在 2025 年 5 月 20 日正式發布,這是另一個新高度的里程碑式的版本,標志著 Spring 生態系統正式全面擁抱人工智能…

Python實戰:打造高效通訊錄管理系統

📋 編程基礎第一期《8-30》–通訊錄管理系統 📑 項目介紹 在信息化時代,高效管理個人或團隊聯系人信息變得尤為重要。本文將帶您實現一個基于Python的通訊錄管理系統,該系統采用字典數據結構和JSON文件存儲,實現了聯系…

89. Java 數字和字符串 - Math 類深入解析

文章目錄 89. Java 數字和字符串 - Math 類深入解析一、引言二、常量與基本方法2.1 Math 類常量2.2 絕對值和舍入絕對值方法舍入方法最小值和最大值 三、指數與對數方法四、三角函數方法五、總結 89. Java 數字和字符串 - Math 類深入解析 一、引言 在 Java 中,除…

STM32之SG90舵機控制(附視頻講解)

目錄 前言: 一、硬件準備與接線 1.1 硬件清單 1.2 接線 二、 SG90舵機簡介 1.1 外觀 1.2 基本參數 1.3 引腳說明 1.4 控制原理 1.5 特點 1.6 常見問題 三、 單片機簡介 四、 程序設計 4.1 定時器配置 4.2 角度控制函數 4.3 主函數調用 五、 總結 …

netstat命令Windows與Linux雙平臺

深入解析netstat命令:Windows與Linux雙平臺實戰指南 netstat(Network Statistics)是網絡診斷中最經典的工具之一,能夠幫助用戶查看網絡連接、端口監聽狀態、路由表等信息。然而,Windows和Linux系統下的netstat在參數和輸出格式上存在差異,容易讓人混淆。本文將詳細對比兩…

攻防世界-ics-07

進入環境 進入項目管理 點擊進行訪問 是一堆代碼進行審計 <?php session_start();if (!isset($_GET[page])) {show_source(__FILE__);die(); }if (isset($_GET[page]) && $_GET[page] ! index.php) {include(flag.php); }else {header(Location: ?pageflag.php);…

基于 Node.js 的 Express 服務是什么?

Express 是基于 ?Node.js? 的一個輕量級、靈活的 Web 應用框架&#xff0c;用于快速構建 ?HTTP 服務?&#xff08;如網站、API 接口等&#xff09;&#xff0c;以下是詳細解析&#xff1a; ?一、Express 的核心作用? ?簡化 Node.js 原生開發? Node.js 原生 http 模塊雖…

linux安裝vscode以及配置vscode

vscode配置 1&#xff0c;準備工作2&#xff0c;VsCode安裝插件3&#xff0c;cmake Tools 的使用 1&#xff0c;準備工作 所謂的準備工作&#xff0c;就是要讓linux具備 vim gcc g編譯器&#xff0c;可使用cmake&#xff0c;makefile等開發的條件。 首先我么以及有一個以安裝好…

基于AI的智能農業病蟲害識別系統實戰指南

引言 在農業現代化進程中&#xff0c;病蟲害防治始終是保障糧食安全的核心挑戰。傳統人工識別方式存在效率低、誤判率高、響應滯后等問題。本文將通過完整的技術實現流程&#xff0c;展示如何利用Python生態構建智能病蟲害識別系統&#xff0c;實現從圖像采集到防治建議輸出的…

【MySQL】第11節|MySQL 8.0 主從復制原理分析與實戰(一)

一、MySQL主從復制基礎 1. 核心概念 定義&#xff1a; MySQL主從復制是將主庫&#xff08;Source/Master&#xff09;的數據變更同步到一個或多個從庫&#xff08;Replica/Slave&#xff09;的機制&#xff0c;默認采用異步復制&#xff0c;支持全庫、指定庫或表的同步。 角…

【RabbitMQ】記錄 InvalidDefinitionException: Java 8 date/time type

目錄 1. 添加必要依賴 2. 配置全局序列化方案&#xff08;推薦&#xff09; 3. 配置RabbitMQ消息轉換器 關鍵點說明 1. 添加必要依賴 首先確保項目中包含JSR-310支持模塊&#xff1a; <dependency><groupId>com.fasterxml.jackson.datatype</groupId>&l…

【機器學習基礎】機器學習入門核心算法:K-近鄰算法(K-Nearest Neighbors, KNN)

機器學習入門核心算法&#xff1a;K-近鄰算法&#xff08;K-Nearest Neighbors, KNN&#xff09; 一、算法邏輯1.1 基本概念1.2 關鍵要素距離度量K值選擇 二、算法原理與數學推導2.1 分類任務2.2 回歸任務2.3 時間復雜度分析 三、模型評估3.1 評估指標3.2 交叉驗證調參 四、應用…

在h5端實現錄音發送功能(兼容內嵌微信小程序) recorder-core

本文將通過一個實際的 Vue3 組件示例&#xff0c;帶你一步步實現“按住錄音&#xff0c;松開發送&#xff0c;上滑取消”的語音錄制功能。 我們將使用強大且小巧的開源庫 recorder-core&#xff0c;支持 MP3、WAV、AAC 等編碼格式&#xff0c;兼容性較好。 &#x1f527; 項目…

深入掌握Node.js HTTP模塊:從開始到放棄

文章目錄 一、HTTP模塊入門&#xff1a;從零搭建第一個服務器1.1 基礎概念解析1.2 手把手創建服務器 二、核心功能深入解析2.1 處理不同請求類型2.2 實現文件下載功能 三、常見問題解決方案3.1 跨域問題處理3.2 防止服務崩潰3.3 調試技巧 四、安全最佳實踐4.1 請求頭安全設置4.…

SSM整合:Spring+SpringMVC+MyBatis完美融合實戰指南

前言 在Java企業級開發領域&#xff0c;SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架組合一直占據著重要地位。這三個輕量級框架各司其職又相互配合&#xff0c;為開發者提供了高效、靈活的開發體驗。本文將深入探討SSM框架的整合過程&#xff0c;揭示整合背后的原…

[AI]大模型MCP快速入門及智能體執行模式介紹

[AI]大模型MCP快速入門及智能體執行模式介紹 一、MCP入門 介紹 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文協議&#xff09;是一種由Anthropic公司于2024年提出的開放標準協議&#xff0c;旨在為大型語言模型&#xff08;LLM&#xff09;提供統一接口&am…

Mac M1 安裝 ffmpeg

1.前言 官網那貨沒有準備m系列的靜態包&#xff0c;然后我呢&#xff0c;不知道怎么想的就從maven項目中的 javacv-platform&#xff0c;且版本為1.5.11依賴里面將這個靜態包把了出來&#xff0c;親測能用&#xff0c;感覺比那些網上說的用什么wget編譯安裝、brew安裝快多了。…

unity控制相機圍繞物體旋轉移動

記錄一下控制相機圍繞物體旋轉與移動的腳本&#xff0c;相機操作思路分為兩塊&#xff0c;一部分為旋轉&#xff0c;一部分為移動&#xff0c;旋轉是根據當前center中心點的坐標&#xff0c;根據距離設置與默認的旋轉進行位置移動&#xff0c;移動是根據相機的左右和前后進行計…