基于 Apache Paimon 流式數據湖提升數據處理的時效性
原創隨著結構化數據、半結構化數據和非結構化數據的不斷增加,越來越多的企業選擇將數據存儲在數據湖中,便于更好地管理和利用數據資產。但是企業對數據更新處理時效性的要求越來越高,數據湖無法實現高吞吐、低延遲的數據攝入、流式訂閱以及實時查詢。因此流式數據湖存儲技術誕生了。
在近日舉辦的WOT全球技術創新大會2023·北京站的《大數據技術創新》專場中,來自阿里云的高級技術專家李勁松帶來了主題為《Apache Paimon 流式數據湖 V0.4與后續展望》的精彩分享,從理論、實踐和未來發展方面詳細介紹了Apache Paimon 流式數據湖。
Apache Paimon 流式數據湖是什么?
Apache Paimon是一個從準實時出發的流式數據湖,也是專門為CDC處理流計算而生的數據湖。Apache Paimon的創新之處在于采用了湖存儲+ LSM的文件組織架構,基于分布式文件系統管理元數據。

在管理元數據之前,首先需要處理元數據。當元數據流入Apache Paimon后,其處理流程分為寫入、壓縮、清理和讀取。寫入和壓縮都在Flink Job中完成,用戶無需創建Spark的離線作業再做異步聚簇(Clustering)。基于這樣的設計,Apache Paimon的優勢之一就是Append 寫入,所以吞吐大;局部壓縮減少了寫入放大,所以消耗低。最后在Flink Sink中自動清理、有序合并。

而對于任何一個創新的技術來說,沒有良好的生態體系就無法走得長遠。雖然Apache Paimon目前的生態體系還不及傳統數據湖,但也已經支持或部分支持Flink、Hive、Trino、Spark和Presto。
其中,Apache Paimon對Flink的支持最佳,可以支持Flink的所有特征。其次是Spark,目前能夠支持讀寫,也基本支持Create Table。StarRocks、DORIS、網易Arctic,阿里云大數據計算(MaxCompute)和實時數倉(Hologres)等產品也正在積極對接中。

流式數據湖新場景
“實時”是流式數據湖的核心。所以Apache Paimon最大的特點就是能讓數據實時流入,做到實時數據流讀和實時字段打寬,不再是每天或每小時更新離線數倉的數據。但是目前在實時入湖、打寬和流讀中也面臨許多痛點,比如吞吐量低和資源消耗高、存在亂序等等。在本次分享中,李勁松詳細介紹了數據湖新場景中的痛點,以及Apache Paimon是如何解決這些難題的。

實時數據入湖
想要處理數據,首先需要讓數據入湖。而實時數據入湖是實時更新來自數據庫的 CDC 數據。但是在實時數據入湖時存在著三類問題。首先,是吞吐量低和資源消耗高的問題。第二,在管理方面,數據湖需要管理好壓縮、清理歷史文件和清理過期分區,并且不需要額外的管理成本。最后在模型演進方面,數據湖不會跟隨模型的變化而變化,僅僅只是存儲數據。
針對這些問題,Apache Paimon從架構和功能兩方面雙管齊下。從架構方面來說,當數據湖結合LSM 的Append后,形成了高效寫入吞吐的優勢;結合LSM的Minor Compaction后,可以有效減少寫入放大,從而解決吞吐量小和資源消耗高的問題。而LSM是按照組件排序的,所以Apache Paimon的寫入性能較原有的Hudi表提升了3倍以上;部分查詢性能則提升了7倍。
在功能方面,李勁松重點介紹了Apache Paimon的CDC入湖功能:表同步和整庫同步。
表同步可以同步表的結構,包括增列、刪列、類型變更和重命名列,還可以新增計算力、定義分區力和定義組件,甚至做到分庫分表的同步。整庫同步可以指定表、增加前后綴,也可以動態新增表。在這兩個功能基礎上,Apache Paimon還提供了CDC Data Schema API,基于Data Schema API便能同步更多的數據,甚至在分級的流計算中做到模型同步。

實時字段打寬
數據入湖存儲后,如果不用則會變成數據沼澤。實時打寬維表的字段能夠給下游提供查詢及流讀,讓數據流動起來。但是實時字段打寬同樣存在三類問題。第一個問題也是吞吐量低和資源消耗高。第二,在讀取方面,如果無法支持列裁剪,則無法達到高效的讀時合并(Merge On Read)。最后是亂序的處理問題,Apache Paimon是基于分布式文件系統管理元數據的,但是分布式處理的亂序場景非常多,亂序如何處理?
Apache Paimon通過支持部分更新來解決這些問題。Apache Paimon基于LSM的部分更新(Partial-Update)功能,從而在讀時合并和合并(Merge)時做到部分更新。這就意味著在查詢時可以做到列裁剪,并且在寫入達到高吞吐時,也能保證查詢有非常好的性能。
而針對亂序問題,Apache Paimon支持定義Sequence Field處理亂序。Apache Paimon V0.5版本引入了一個新的概念——Sequence Group。Sequence Group是讓每個流定義自己的序列組應對多流亂序,從而真正做到部分更新,而不是non-null Update。

實時數據流讀
實時數據流讀是提供消息隊列體驗的流讀,并能根據主鍵生成變更日志。數據湖流讀的痛點之一在于沒有全量數據。如果沒有以前的數據,數據只能完全從零開始生成,那么結果可能就會很不理想。除此之外,數據湖還有生成變更日志成本較高、文件清理與流讀的矛盾(FileNotFound)以及不支持Flink的Lookup Join的問題。
Apache Paimon著重增強了流讀。Apache Paimon首先支持流讀原始數據,實現全增量數據一體流讀。而在生成變更日志方面,Apache Paimon是以Full-compaction的方式生成變更日志,同時也支持多種生成方案,其中就包括Flink的Lookup Join。通過Apache Paimon生成的變更日志,時延也有所降低:Lookup 模式時延在1-3分鐘;Full-compaction 模式時延在3-10分鐘。
此外,Apache Paimon還有一個新的功能——Consumer-ID。Consumer-ID類似Kafka的GroupID,確保數據不會被淘汰,保證流讀的安全性。Consumer-ID也支持流讀無狀態重啟,解決流讀恢復時的FileNotFound的問題。

Apache Paimon在社區中的應用實踐
以上都是從理論方面介紹Apache Paimon的獨特之處。而在實踐應用中,Apache Paimon的表現又如何?接下來,李勁松主要介紹了Apache Paimon在阿里云計算平臺、字節跳動、同程旅行及其它社區中的應用實踐,展現出Apache Paimon出色的實踐能力。
阿里云計算平臺目前已達到了計算全集成,Apache Paimon替代Hudi成為實時入湖的首選。計算平臺可以通過實時計算Flink入湖,或通過CTAS、CDAS命令達到模型同步入湖,并進行實時計算流讀。
而字節跳動集成了Apache Paimon + Flink,解決了血緣管理和一致性管理問題,實現了真正意義上的Streaming Warehouse生產體系,讓每個數據流動并沉淀。
同程旅行引入Apache Paimon,優化了原有的Hudi近實時數倉,整體規模達到了上百個作業,最大的表有90億+的數據。
除此以外,中原銀行、米哈游、Bilibili、塵鋒信息、汽車之家、巴別時代、海蘭寰宇等企業都在用Apache Paimon + Flink探索流式數倉,甚至是向流批一體近實時數倉的方向前進。

Apache Paimon未來規劃
通過從理論和應用實踐方面的介紹,不難看出Apache Paimon已經解決了很多目前數據湖存在的問題。但是Apache Paimon的創新不止于此。在演講的最后,李勁松提到了Apache Paimon短期和長期的發展規劃,表明了未來的發展方向。
首先在短期內,Apache Paimon需要加強CDC場景、實現動態 Bucket 全自動、創建Immutable Tag從而提供Immutable的離線版本、增強Append-Only處理以及Spark集成。

從長期發展來看, CDC實時數據湖需要在Apache Paimon中達到完全成熟的狀態;其次,Append離線表達到生產可用的狀態;最后,生態能夠達到全面對接,Spark集成完全成熟。

以上內容整理自阿里云高級技術專家李勁松在WOT全球技術創新大會2023·北京站《大數據技術創新》專場中的精彩分享。獲取完整PPT請關注51CTO技術棧公眾號,后臺發送【WOT2023PPT】即可直接領取。
































