基於 Paimon 的袋鼠雲實時湖倉入湖實戰剖析

袋鼠云数栈發表於2024-06-27

在當今資料驅動的時代,企業對資料的實施效能力提出了前所未有的高要求。為了應對這一挑戰,構建高效、靈活且可擴充套件的實時湖倉成為數字化轉型的關鍵。本文將深入探討袋鼠雲數棧如何透過三大核心實踐——ChunJun 融合 Flink CDC、MySQL 一鍵入湖至 Paimon 的實踐,以及湖倉一體治理 Paimon 的實踐,重塑實時湖倉的架構與管理,為企業打造實時資料分析的新引擎。

ChunJun 融合 Flink CDC

Flink CDC(Change Data Capture)是由 Apache Flink 提供的一個流資料整合工具,它允許使用者透過 YAML 檔案優雅地定義 ETL(Extract, Transform, Load)流程,並自動生成定製化的 Flink 運算元和提交 Flink 作業。

Flink CDC 的核心特性包括:端到端資料整合框架、易於構建作業的 API、多表支援、整庫同步精確一次語義、增量快照演算法等諸多特性。ChunJun 融合 Flink CDC 能夠更好支援資料的入湖入倉,帶來了多方面的變化:

file
· 高吞吐、低延遲:Flink CDC 能夠以高吞吐量和低延遲的方式捕獲和傳輸資料庫的變更

· 全增量一體化:Flink CDC 支援全量資料和增量資料的同步,無需手動操作即可實現全量快照與增量日誌的自動銜接

· 支援異構資料來源:Flink CDC 支援多種資料來源,可以輕鬆實現異構資料來源的整合,透過 Flink SQL 定義不同型別的 CDC 表,實現資料融合

· 實時性:支援近實時的資料同步,滿足對資料時效性要求高的場景

· 鏈路短元件少:Flink CDC 的架構設計讓整個資料捕獲和處理的鏈路變得更為簡潔,所涉及的元件數量相對有限,這不但降低了系統的繁雜程度,還削減了學習與運維的成本

MySQL 一鍵入湖 Paimon 實踐

ChunJun 融合 Flink CDC 增加了實時湖倉資料接入的方式,結合 FLink CDC 提供的 MySQL 資料到 Paimon 的資料同步能力,能夠高效地將 MySQL 表資料實時寫入 Paimon 中。在融合的同時,還支援歷史 Json 格式構建任務、髒資料、Mertic、表血緣、視覺化配置等功能。

file

接下來透過內部實踐案例進行深入分析。

● 採集配置 Flink CDC 來源

實時採集配置 Flink CDC 來源為 MySQL 時,嚮導模式配置還原範圍採用全量+增量模式。

首先,對資料庫表進行全錶快照讀取,生成資料的一致性快照,以同步來源錶的歷史全量資料。在全量快照讀取完成後,會自動切換至增量模式,對資料庫的增量變化進行採集。表選擇的方式多樣,支援整庫同步、分庫分表同步、單表選擇同步,同時也支援透過正則的方式選擇表。

對於 DDL 變更,當上遊產生 DDL 操作時,若選擇支援,下游會自動執行;若選擇不支援,則對上游產生的 DDL 做異常捕獲,此時任務會失敗。搭配告警功能,可及時告知出現異常的情況。出現異常後,需要手動執行 DDL 操作,任務才能恢復正常執行。

file

● 採集配置目標端

目標源透過 HiveMetastore 方式配置目標 Paimon 表。寫入表的方式具有一定靈活性,支援手動選擇表。對於上游存在多表寫入同一下游表的場景,有一定要求,必須保證上下游表結構保持一致。

同時,支援使用相同表名、自定義表名的方式。在同步前,會先建立寫入的目標表,如果已存在,則直接使用現成表。表分割槽方面,透過輸入固定的語法,將對應上游的主鍵表欄位作為目標 Piamon 表的分割槽欄位。

file

● 排程執行採集任務

實時採集任務在透過語法檢查後,提交至排程運維中執行。採集任務的指標包括 Mertic 輸入輸出指標展示、髒資料指標以及資料血緣解析等。

file

● 查詢入湖資料

透過實時平臺中 FlinkSQL 任務所提供的功能,對 Paimon 表進行查詢並插入資料。利用 FlinkSQL 的 SqlQuery 功能構建 Select 查詢語句,並採用流模式實時查詢 Paimon 表,以採集插入資料的情況。

file

湖倉一體治理 Paimon 實踐

在構建和維護資料湖與資料倉儲(湖倉)的一體化架構程序中,袋鼠雲憑藉湖倉治理機制,不斷推進實時資料湖的最佳化與完備。

然而,Paimon 在資料處理期間可能會引發資料碎片化的問題,像小檔案的急劇增多、過時快照的持續累積以及孤兒檔案的出現,這些狀況均有可能給資料湖表的讀寫效率帶來極為顯著的不良影響。

為有效應對這一挑戰,袋鼠雲於數棧湖倉一體中引入了檔案治理機制,支援定期開展資料整理操作,例如合併小檔案、清理過期的資料快照以及清除孤兒檔案等。此類治理活動旨在增強資料湖的整體讀寫效能,保障資料流的高效執行和分析工作的順利開展。藉由這些資料治理手段,袋鼠雲能夠為湖倉架構的穩定性和效能提供穩固支撐,進而助力企業在大資料時代實現敏捷決策和深度洞察。

後設資料管理

● Paimon 分割槽概覽

Paimon 運用了與 Apache Hive 相同的分割槽理念來對資料進行分離。分割槽屬於一種可選的形式,能夠依據日期、城市和部門等特定列的值,將表劃分成相關的部分。每個表能夠擁有一個或多個分割槽鍵,以識別某一特定的分割槽。分割槽概覽會展示分割槽的資料記錄、檔案數量以及檔案的大小,並且支援對分割槽的刪除操作。

file

● Paimon 快照概覽

快照記錄了一個表在某一特定時間點的狀態。使用者能夠藉助最新的快照獲取一個表的最新資料。利用時間旅行,使用者還可以透過較早的快照訪問表的先前狀態。快照概覽展示了當前表的所有快照、最新 snapshot,支援手動建立標籤並在列表中展示引用關係,同時支援快照的刪除和回滾操作。

file

● Paimon 標籤概覽

標籤是對快照的引用,能夠基於某個特定快照建立。使用者能夠在特定的快照上新增標籤,如此一來,即便快照過期且被刪除,只要標籤仍然存在,就能夠透過標籤訪問到相應的資料。標籤概覽展示了表的所有歷史標籤版本、標籤與快照的引用關係,並且支援標籤的刪除操作。

file

湖表治理

● Paimon 小檔案合併

隨著時間的不斷推移,持續的寫入操作或許會產生大量的小檔案,這將致使查詢效能降低,原因在於系統需要開啟並讀取更多的檔案。Compaction 能夠透過合併這些小檔案,從而減少檔案的總數。在資料檔案治理中,支援對 Paimon Table、Database 的小檔案進行治理。

Compaction Table 支援三種排序策略,透過配置不同的治理方式,支援週期性地對錶進行治理。Compaction Database 支援對單個或者多個庫執行檔案的合併操作。

file

● Paimon 孤兒檔案清理

孤兒檔案指的是那些不再被任何快照所引用的檔案,其可能因異常的寫入操作、未完成的事務或者錯誤的刪除操作而出現。清理此類孤兒檔案是維繫資料湖健康狀態的關鍵環節,畢竟它們會佔據儲存空間。

袋鼠雲實時湖倉能夠透過配置表的孤兒檔案清理策略,支援清理 24 小時以前的孤兒檔案,同時還能夠透過配置週期治理,實現週期性地對孤兒檔案進行治理。

file

● Paimon 過期快照清理

Paimon Writer 在每次提交資料時,會生成一個或兩個快照。這些快照可能包含新增的資料檔案,也可能將一些舊的資料檔案標記為刪除。需要注意的是,即使資料檔案被標記為刪除,它們也不會立即從物理儲存中真正刪除。透過配置過期快照清理和過期快照保留數量,可以對快照進行物理儲存的刪除操作。

file

一鍵 Hive 錶轉 Paimon 表

● 原地轉表

使用 Spark 內建的 migrate_table 進行表遷移時,會先建立一個臨時的 Paimon 表,然後將源表的檔案直接移動到該臨時表中,接著對臨時 Paimon 表進行 rename 操作,使其表名與源表一致,這樣原來的 Hive 表就不再存在。

● New 新表

袋鼠雲實時湖倉自定義了一個全新的儲存過程 migrate_to_target_table ,該儲存過程會讀取源表的資料,建立目標 Target 表,並把源表的資料寫入到新建立的 Target 表中,在此過程中原有的 Hive 表依然得以保留。

file
《行業指標體系白皮書》下載地址:https://www.dtstack.com/resources/1057?src=szsm

《數棧產品白皮書》下載地址:https://www.dtstack.com/resources/1004?src=szsm

《資料治理行業實踐白皮書》下載地址:https://www.dtstack.com/resources/1001?src=szsm

想了解或諮詢更多有關大資料產品、行業解決方案、客戶案例的朋友,瀏覽袋鼠雲官網:https://www.dtstack.com/?src=szbky

相關文章