當前位置: 妍妍網 > 資訊

Flink+Paimon+Hologres 構建即時湖倉數據分析

2024-04-16資訊

本文整理自阿裏雲高級專家喻良,在 Flink Forward Asia 2023 主會場的分享。本次分享將為大家介紹 Flink + Paimon + Hologres 構建湖倉一體數據分析。Hologres 是阿裏雲自研一站式即時數倉產品,透過和 Paimon 的深度合作,提供分鐘級/秒級時效性+秒級 OLAP 效能,實作流式湖倉的分層建模,降低開發運維成本,打破數據孤島,實作業務洞察。內容主要分為以下五部份:

1. 數據分析架構的即時性演進

2. Hologres 湖倉架構的三個能力創新

3. Flink+Paimon+Hologres:即時湖倉五個典型套用場景

4. Hologres 湖倉分析未來規劃

5. Hologres+Flink:企業級即時數倉最佳實踐

T i p s F F A 2 0 2 3

01

數據分析架構的即時性演進

目前很多使用者都在考慮將湖倉分析從 Hive 架構遷移到 Lakehouse,在 Lakehouse 上出現了 Iceberg、 Dalta Lake、Hudi 三劍客,讓傳統方式改善了很多,比如操作更方便、有 ACID、Time Travel、查詢效率更高、 Upsert 能力更強等。


隨著企業對於數據更新處理的時效性要求越來越高,同時又提出了高吞吐入湖、低延時數據、具備流式的訂閱、高效能的即時查詢等需求,這類需求可以歸為流式數倉。

湖倉架構中 Table Format 層要應對這些需求,需要更加面向流式湖倉設計,另外從引擎上來看,需要更高效能的查詢分析能力。

Paimon 是為即時而生的 Table Format,最主要的特點是引入了 LSM Tree。Paimon 和 Hudi 相比, Upsert 效能提升了 4 倍,Scan 效能提升了 10 倍,具備低延時、低成本入湖、開發效率高等特點。另外大家對 Paimon 適配熱情都非常高,各家產品適配工作都推進地比較快,所以它的生態較其他幾個Table Format 發展得更快。


Hologres 是面向數據服務層設計的統一的數據平台,可以將 OLAP 引擎查詢、即席分析、線上服務、向量計算等多個數據套用構建在統一儲存上,實作一份數據多種計算。在效能上,Hologres 在 TPC-H 30TB 上排名世界第一,近兩年的雙十一 Hologres 在集團內部的峰值寫入達到 10 億每秒。在信通院的測試中,Hologres 基於 Serverless 能力,可以把節點的規模推到 8192 節點,實作了超大規模的 OLAP 引擎。

Flink + Paimon + Hologres 流式湖倉方案是將 3 個產品做了非常緊密的結合,首先使用 Flink 將數倉以 Paimon 這種 Table Format 在湖上構建,使用 Flink 進行流計算、使用 Hologres 對各層數倉做統一的 OLAP 查詢和 ADS 層線上分析。基於 Paimon 可以實作高吞吐入湖;基於 Flink 可以實作全鏈路的即時計算,基於 Hologres 可以實作高效能的 OLAP 查詢,所以整個鏈路從即時性、時效性、成本幾個方面都可以取得比較好的平衡。

02

Hologres 流式湖倉架構的三個能力創新

Hologres 是標準的 MPP 資料庫,主要由兩個模組組成, FE(Frontend) 和 QE(Query Engine), FE 負責接收 SQL,並透過最佳化器生成物理 Plan, QE 負責高效率執行 Plan。為了適配 LakeHouse, 引入 DLF-FDW,這個元件在後設資料上打通了 DLF 和 HMS,在數據鏈路上打通了 OSS 和 OSS-HDFS ,支持存取湖上 Paimon、Hudi 、Delta 等數據格式。


針對即時湖倉場景,Hologres 專門設計了一些新特性,以滿足使用者對即時湖倉成本、效能、隔離方面的需求。

第一個特性,基於 Serverless 湖加速的能力。當使用者的數據在以 Paimon 格式在湖上構建好後, 希望 OLAP 引擎能以更低成本去做加速查詢,為此我們推出 Serverless 方案。首先為使用者免費提供一個 Frontend 節點,用於儲存後設資料和許可權等,每個使用者獨享 Frontend 節點,使用者的後設資料是獨立的、完全隔離的。後端提供多組共享資源池,為 SQL 提供實際的計算資源。在實際 SQL 執行中,套用層 SQL 送出到 Frontend 上, 經過最佳化器生成物理 Plan,根據負載選擇一個後端共享資源池進行執行,完成後會原路返回執行結果。基於這個方案可以實作高效能數據湖查詢加速,該方案最大的特點是使用者的查詢成本低,使用者手上不需要持有資源,當 SQL 執行時,系統會自動記錄 SQL 讀取了多少數據,根據實際處理的數據量進行計費,根據實際使用付費,不使用不付費。

第二個特性,彈性與隔離。數倉上有各種各樣的業務,各業務負載的型別不一樣,有的 App 線上查詢,查詢響應要求毫秒級,要求數百數千 QPS,有的業務是 ETL 數據加工作業,執行時間長,消耗資源多,有的業務是復雜的聚合指標等等,為了更好解決這個問題,Hologres 提供了彈性計算資源組模式,這是一種徹底的計算負載和儲存能力解耦的架構。

首先在例項中引入 Gateway 作為統一 SQL 閘道器接入層,下層把資源分成了多個獨立的計算組,每組都可以獨立執行 SQL。比如說第一個計算資源組用於加工和計算、第二個用於 OLAP 查詢、第三個用於線上的業務查詢。另外計算資源組是共享同一份儲存,計算資源組在授權後可以存取所有的數據,在實際執行過程中 SQL 透過 Gateway 接入進來,提前配置好路由規則(定義好使用者與計算資源組的對應關系),它會根據這個規則去路由到具體的計算組。

基於彈性計算資源組可以實作按需擴容。當業務高峰時,可以對其中任意計算組擴容,也可以對這個例項增加資源組,當業務低峰期,可以直接對資源組進行刪除、縮容操作。相關變更操作對查詢沒有影響,對即時寫入僅有 5 秒鐘的影響。透過這種方式使用者持有的資源可以做到最小化,從而達到降本增效。因為計算組天然物理隔離,所以避免了業務和業務相互幹擾,讓查詢更穩定。


第三個特性, JSON 數據列式儲存最佳化。在支持使用者處理數據湖查詢的時候會遇到大量半結構化數據,主要是 JSON 數據,處理 JSON 數據有兩種方式:

  • 第一種方式在入庫的時候把 JSON 打成大寬表,該方案存在一些缺點,如一旦業務上有變化,要加欄位的時候整個業務就得停下來,然後全鏈路改完後再上線

  • 第二種方式直接往柯瑞寫入 JSON,在業務上方便,任務也簡單,業務直接在 JSON 中增加欄位即可,但引擎查詢的時候就會非常慢,因為在讀數據的時候,需要將 JSON 展開去分析


  • Hologres JSON 數據列式儲存最佳化方案可以同時解決入庫方便,滿足壓縮儲存、高效能計算需求,方案具體為:

  • 套用直接以 JSON 方式寫到資料庫

  • Hologres 有超高的即時性,數據直接寫入到記憶體裏,並生成 WAL Log,當記憶體攢到一定大小後會落成檔

  • 後台異步啟動 Compaction 任務分析檔中的 JSON 欄位,欄位重復率低於閾值就會被重新放到新的 JSON 裏面,重復率高於標準的欄位抽出來形成列存,以 ORC 格式存成檔,Compaction 後就可以當做列存處理,對它的各列進行自動索引、壓縮。這種抽取是底層儲存層的自動轉換,在邏輯上仍然是同一個 JSON 欄位,不改變原有使用者原有使用 JSON 的函式和操作符

  • 基於索引和壓縮,可以高效處理數據讀取、Filter 等操作,這些操作對業務無感,後台異步進行且整個查詢過程中數據也是一致的


  • 2022 年雙十一期間,淘寶搜尋部門使用了該方案,查詢效率有 400% 提升,同時列存化使壓縮率大幅提升,儲存成本下降 45%。

    03

    Flink+Paimon+Hologres

    構建即時湖倉的五個典型套用場景

    下面介紹基於 Flink+Paimon+Hologres 實踐湖倉一體數據分析的經典場景。

    第一個場景數據湖查詢加速

    上圖展示透過 SQL 實作數據湖查詢加速的 Demo:

  • 首先上圖最左邊是 Flink 的 SQL 指令碼,先建立 Paimon 表,再去對 Paimon 表進行數據寫入。

  • 中間是 Hologres 查詢加速 SQL 展示

  • 批次匯入外表,可以同步 DLF 下所有的表資訊,這只是關聯後設資料資訊,沒有做實際數據入庫

  • 使用圖中查詢 SQL 對它進行直接查詢,也可以用 Insert Into Select 語句把數據匯入到 Hologres 的內部儲存中進行查詢。

  • 使用圖中查詢 SQL 對它進行直接查詢,也可以用 Insert Into Select 語句把數據匯入到 Hologres 的內部儲存中進行查詢。

    第二個場景為湖倉聯合查詢

    左邊是聯合查詢的物理 Plan,可以看到下面是 Hologres 內表的 Scan 算子,中間是 Paimon 外表 Scan 算子,最上面為 Join。


    第三個場景為湖倉冷熱分層

    業務在進行湖倉查詢的時候,會頻繁查詢最近七天的數據,偶爾查詢七天以前的數據。因此需要低成本的冷熱分層查詢方案。

    上圖右側提供了 SQL Demo 例子

  • 建立外表,將 Paimon 這個表的後設資料資訊匯入進來,Paimon 裏存了全量的歷史數據

  • 建立 Hologres 內表,裏面存放了最近 7 天的業務熱數據

  • 透過檢視將近 7 天的熱數據和 7 天前的冷數據做檢視關聯起來

  • 基於這個檢視進行範圍查詢,當查詢範圍落到了熱數據上,就會直接去查詢 Hologres 內表,當這個時間範圍落到了 7 天以前,就會直接查詢 Paimon 表。當兩個範圍都包含了,就會形成上圖左邊的查詢計劃,下面是 Paimon 外表 Scan,中間是 Hologres 的 Scan 算子,上面會有 Append 將它們 Union 起來。

  • 該方案可以降本增效,提升開發效率。再補充一下,在 Hologres 內表上有自動冷熱分層功能,在分區表上定義熱數據保留時間,超期後系統會自動搬遷到冷數據中,對運維和查詢無感。Holo 的冷存儲存成本幾乎與 OSS 是一致的,且無需手動搬遷,體驗更優。

    第四個場景為基於湖數據構建 Dynamic Table

    Dynamic Table 是 Hologres 近期內部的邀測功能,類似於物化檢視,融合了即時更新與批次更新,具備批流一體的更新體驗。

    基於Dynamic Table 構建湖倉分層過程:

  • 在 DWS 層數倉使用 Paimon 在湖上構建數據表和維表

  • 在 ADS 層、DWD 層使用 Dynamic Table 逐層構建數倉


  • 基於Dynamic Table,可以提供高 QPS、 高效能查詢。當希望對 Dynamic Table 進行更新的時候,就可以用 Refresh Table 命令去重新整理。

    Dynamic Table 更新能力:如果資料來源為 Hologres 內表,可以提供增量更新能力,如果是 Paimon 表可以提供全量更新能力。後面計劃將 Paimon Binlog 日誌接上,之後湖上的數據也可以去做增量更新場景。

    第五個場景為流式湖倉的分層實踐

    透過 Flink 的流計算能力,將數倉的 ODS 層、 DWD 直接構建在湖上,以 Paimon 來儲存,後面兩層可以構建在 Hologres 上,上層業務層透過 Flink 提供流計算的能力,透過 Hologres 提供 OLAP 線上查詢的能力。Hologres 和 Paimon 都具備流式存取能力,故數倉分層可以根據儲存成本和數據時效性進行選擇。直接將數據放在 Hologres 上,可以提供秒級時效性以及極致 OLAP 效能;如果將數據構建在 Paimon 上,使用 Hologres 來進行查詢加速,可以提供分鐘級的時效性和秒級 OLAP 效能。


    04

    Hologres 湖倉分析未來規劃

    Hologres 湖倉一體規劃重點將圍繞 Paimon 格式展開,有兩個目標,希望把基於 Paimon 的查詢效能從秒級推向亞秒級體驗。

    透過支持如下功能最佳化查詢效能

  • C ++ Native Reader

  • 引入多級的智慧緩存

  • 支持更多統計資訊,幫助最佳化器生成更好 Plan


  • 我們希望對 Paimon 的接入功能更完整

  • 支持Paimon格式入湖

  • 支持消費Paimon的 Binlog 能力

  • 適配後設資料:自動發現Maxcompute後設資料在雲上已是標配能力,但對Paimon還未支持,後面需要適配。


  • 05

    Hologres+Flink:

    企業級即時數倉最佳實踐

    這是 Hologres 加 Flink 流式分層方案,和湖倉分層的方案是比較類似的,區別是整個數倉都構建在了 Hologres 上。這個方案可以支持高效能的數據即時寫入、即時更新、即時查詢,將數據的新鮮度保持在秒級甚至毫秒級,幫助有極致需求的企業實作業務分析的極致即時化。

    Hologres+Flink 這套組合是在阿裏集團內部經過多年即時化場景打磨探索出來的最佳架構,例如淘天使用者增長團隊成功讓 3-5min 的畫像分析提升到 10s 左右,CCO 客戶服務團隊數據分析效率提升 10 倍,淘菜菜一年成本降低幾百萬。透過多年的積累,Hologres+Flink 產品功能逐漸互補,以即時計算 Flink 為中心,即時數倉 Hologres 圍繞其有多項產品使用路徑:Hologres 能夠作為 Flink 的維表來使用;透過 Flink 能夠把加工好的結果寫入 Hologres;Hologres 提供 binlog 能夠被 Flink 消費;Hologres Catalog 支持後設資料服務、整庫同步、SchemaEvolution 等。

    Hologres 搭配 Flink 可以支持非常高效能的即時寫入與更新,第一支持 PK 查詢,提供高效能的 Upsert 能力;第二支持寬表 merge 和局部列更新;第三新增 Check And Put 操作,亂序數據也能保證和上遊最終一致性;第四新增 Fixed_Copy 模式,寫入效能更好。Flink 都是即時入庫,增加了基於 Hologres 的批次入庫的能力。右圖展示 128 Core 的 Hologres 效能:在 Append Only 的情況下無主鍵表的時候可以達到 230 萬的 RPS;在 Insert 有主鍵表,沖突就丟棄新行的模式下可以達到 200 萬RPS;在 Update 的場景下,根據主鍵沖突比例不一樣,可以達到 70-80 萬的 RPS。


    隨著大數據從規模化走向即時化,即時數據的需求覆蓋互聯網、交通、傳媒、金融、政府等各個領域。即時計算在企業大數據平台的比重也在不斷提高,部份行業已經達到了 50%。Hologres+Flink 透過豐富企業級能力,替換開源復雜的各類技術元件,減少多種技術棧學習、多種集群運維、多處數據一致性維護等成本,讓企業專註於業務,實作降本增效。

  • 小紅書 OLAP 場景透過 Hologres 替換 Clickhouse,查詢效能大幅提升,在推薦場景下基於 Hologres+Flink 實分時析使用者 A/B 分組測試結果,即時調整推薦策略,更新推薦模型。

  • 小邁科技透過 Hologres+Flink 構建百億級廣告即時數倉,滿足高效能寫入、極速復雜查詢、高可用等需求,讓使用者行為分析實作秒級響應,快速響應業務需求。

  • 金蝶管易雲升級即時數倉到 Hologres+Flink,數據延遲從 30S+ 降低到秒級,借助 Hologres 強大的實分時析聚合能力,解決數據統計延遲問題,並且整體資源成本降低 50%。

  • 好未來將 Kudu 作為 OLAP 引擎,使用 Impala 進行數據載入、運算,透過 Hologres 同時替換 Kudu/Impala 實作百萬級寫入和毫秒級查詢能力,降低成本近百萬/年。

  • 樂元素透過測試發現對比 Presto 效能提升了 5~10 倍,64 核 Holgores 可直接替換 96 核 Presto 集群,升級數倉架構,讓業務營運效率提升 10 倍+。

  • 最後總結一下,使用 Flink+Paimon+Hologres 讓我們在流式湖倉、即時數倉都有一站式的體驗。全鏈路都用 SQL 來進行操作,每層數據都是可修改、可復用,整個方案元件比較少,整個開發以及維護的難度都比較低。這個方案最大的特色是讓開發者、業務方在數據的新鮮度、成本、時效三個維度有更大範圍的選擇,可以自由選擇分鐘級、秒級的方案。從效能上,基於直讀和向量引擎可以實作高效湖加速,Paimon+Hologres 提供分鐘級的時效性和秒級的 OLAP 能力。最後 Hologres + Flink 具備整套企業級能力,在高可用、資源彈性、故障處理、運維、負載隔離、可觀測、安全性都是非常完備的。希望後續 Hologres 攜手 Paimon 可以在湖倉分析中實作更高的效能,更絲滑的使用者體驗。

    阿裏雲官網搜尋 Hologres 進入官網檢視詳情,復制下方連結 領取 5000 CU時,100 GB 儲存 免費試用資源進行使用。

    https://free.aliyun.com/?pipCode=hologram


    F l i n k F o r w a r d A s i a 2 0 2 3


    F l i n k F o r w a r d A s i a F F A 2 0 2 3

    A p a c h e F l i n k F F A 2 0 2 3 F F A 2 0 2 3


    F l i n k

    A p a c h e F l i n k



    F F A 2 0 2 3