基于 Apache Paimon 流式數(shù)據(jù)湖提升數(shù)據(jù)處理的時(shí)效性
原創(chuàng)隨著結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的不斷增加,越來越多的企業(yè)選擇將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)湖中,便于更好地管理和利用數(shù)據(jù)資產(chǎn)。但是企業(yè)對(duì)數(shù)據(jù)更新處理時(shí)效性的要求越來越高,數(shù)據(jù)湖無法實(shí)現(xiàn)高吞吐、低延遲的數(shù)據(jù)攝入、流式訂閱以及實(shí)時(shí)查詢。因此流式數(shù)據(jù)湖存儲(chǔ)技術(shù)誕生了。
在近日舉辦的WOT全球技術(shù)創(chuàng)新大會(huì)2023·北京站的《大數(shù)據(jù)技術(shù)創(chuàng)新》專場(chǎng)中,來自阿里云的高級(jí)技術(shù)專家李勁松帶來了主題為《Apache Paimon 流式數(shù)據(jù)湖 V0.4與后續(xù)展望》的精彩分享,從理論、實(shí)踐和未來發(fā)展方面詳細(xì)介紹了Apache Paimon 流式數(shù)據(jù)湖。
Apache Paimon 流式數(shù)據(jù)湖是什么?
Apache Paimon是一個(gè)從準(zhǔn)實(shí)時(shí)出發(fā)的流式數(shù)據(jù)湖,也是專門為CDC處理流計(jì)算而生的數(shù)據(jù)湖。Apache Paimon的創(chuàng)新之處在于采用了湖存儲(chǔ)+ LSM的文件組織架構(gòu),基于分布式文件系統(tǒng)管理元數(shù)據(jù)。
在管理元數(shù)據(jù)之前,首先需要處理元數(shù)據(jù)。當(dāng)元數(shù)據(jù)流入Apache Paimon后,其處理流程分為寫入、壓縮、清理和讀取。寫入和壓縮都在Flink Job中完成,用戶無需創(chuàng)建Spark的離線作業(yè)再做異步聚簇(Clustering)?;谶@樣的設(shè)計(jì),Apache Paimon的優(yōu)勢(shì)之一就是Append 寫入,所以吞吐大;局部壓縮減少了寫入放大,所以消耗低。最后在Flink Sink中自動(dòng)清理、有序合并。
而對(duì)于任何一個(gè)創(chuàng)新的技術(shù)來說,沒有良好的生態(tài)體系就無法走得長遠(yuǎn)。雖然Apache Paimon目前的生態(tài)體系還不及傳統(tǒng)數(shù)據(jù)湖,但也已經(jīng)支持或部分支持Flink、Hive、Trino、Spark和Presto。
其中,Apache Paimon對(duì)Flink的支持最佳,可以支持Flink的所有特征。其次是Spark,目前能夠支持讀寫,也基本支持Create Table。StarRocks、DORIS、網(wǎng)易Arctic,阿里云大數(shù)據(jù)計(jì)算(MaxCompute)和實(shí)時(shí)數(shù)倉(Hologres)等產(chǎn)品也正在積極對(duì)接中。
流式數(shù)據(jù)湖新場(chǎng)景
“實(shí)時(shí)”是流式數(shù)據(jù)湖的核心。所以Apache Paimon最大的特點(diǎn)就是能讓數(shù)據(jù)實(shí)時(shí)流入,做到實(shí)時(shí)數(shù)據(jù)流讀和實(shí)時(shí)字段打?qū)?,不再是每天或每小時(shí)更新離線數(shù)倉的數(shù)據(jù)。但是目前在實(shí)時(shí)入湖、打?qū)捄土髯x中也面臨許多痛點(diǎn),比如吞吐量低和資源消耗高、存在亂序等等。在本次分享中,李勁松詳細(xì)介紹了數(shù)據(jù)湖新場(chǎng)景中的痛點(diǎn),以及Apache Paimon是如何解決這些難題的。
實(shí)時(shí)數(shù)據(jù)入湖
想要處理數(shù)據(jù),首先需要讓數(shù)據(jù)入湖。而實(shí)時(shí)數(shù)據(jù)入湖是實(shí)時(shí)更新來自數(shù)據(jù)庫的 CDC 數(shù)據(jù)。但是在實(shí)時(shí)數(shù)據(jù)入湖時(shí)存在著三類問題。首先,是吞吐量低和資源消耗高的問題。第二,在管理方面,數(shù)據(jù)湖需要管理好壓縮、清理歷史文件和清理過期分區(qū),并且不需要額外的管理成本。最后在模型演進(jìn)方面,數(shù)據(jù)湖不會(huì)跟隨模型的變化而變化,僅僅只是存儲(chǔ)數(shù)據(jù)。
針對(duì)這些問題,Apache Paimon從架構(gòu)和功能兩方面雙管齊下。從架構(gòu)方面來說,當(dāng)數(shù)據(jù)湖結(jié)合LSM 的Append后,形成了高效寫入吞吐的優(yōu)勢(shì);結(jié)合LSM的Minor Compaction后,可以有效減少寫入放大,從而解決吞吐量小和資源消耗高的問題。而LSM是按照組件排序的,所以Apache Paimon的寫入性能較原有的Hudi表提升了3倍以上;部分查詢性能則提升了7倍。
在功能方面,李勁松重點(diǎn)介紹了Apache Paimon的CDC入湖功能:表同步和整庫同步。
表同步可以同步表的結(jié)構(gòu),包括增列、刪列、類型變更和重命名列,還可以新增計(jì)算力、定義分區(qū)力和定義組件,甚至做到分庫分表的同步。整庫同步可以指定表、增加前后綴,也可以動(dòng)態(tài)新增表。在這兩個(gè)功能基礎(chǔ)上,Apache Paimon還提供了CDC Data Schema API,基于Data Schema API便能同步更多的數(shù)據(jù),甚至在分級(jí)的流計(jì)算中做到模型同步。
實(shí)時(shí)字段打?qū)?/span>
數(shù)據(jù)入湖存儲(chǔ)后,如果不用則會(huì)變成數(shù)據(jù)沼澤。實(shí)時(shí)打?qū)捑S表的字段能夠給下游提供查詢及流讀,讓數(shù)據(jù)流動(dòng)起來。但是實(shí)時(shí)字段打?qū)捦瑯哟嬖谌悊栴}。第一個(gè)問題也是吞吐量低和資源消耗高。第二,在讀取方面,如果無法支持列裁剪,則無法達(dá)到高效的讀時(shí)合并(Merge On Read)。最后是亂序的處理問題,Apache Paimon是基于分布式文件系統(tǒng)管理元數(shù)據(jù)的,但是分布式處理的亂序場(chǎng)景非常多,亂序如何處理?
Apache Paimon通過支持部分更新來解決這些問題。Apache Paimon基于LSM的部分更新(Partial-Update)功能,從而在讀時(shí)合并和合并(Merge)時(shí)做到部分更新。這就意味著在查詢時(shí)可以做到列裁剪,并且在寫入達(dá)到高吞吐時(shí),也能保證查詢有非常好的性能。
而針對(duì)亂序問題,Apache Paimon支持定義Sequence Field處理亂序。Apache Paimon V0.5版本引入了一個(gè)新的概念——Sequence Group。Sequence Group是讓每個(gè)流定義自己的序列組應(yīng)對(duì)多流亂序,從而真正做到部分更新,而不是non-null Update。
實(shí)時(shí)數(shù)據(jù)流讀
實(shí)時(shí)數(shù)據(jù)流讀是提供消息隊(duì)列體驗(yàn)的流讀,并能根據(jù)主鍵生成變更日志。數(shù)據(jù)湖流讀的痛點(diǎn)之一在于沒有全量數(shù)據(jù)。如果沒有以前的數(shù)據(jù),數(shù)據(jù)只能完全從零開始生成,那么結(jié)果可能就會(huì)很不理想。除此之外,數(shù)據(jù)湖還有生成變更日志成本較高、文件清理與流讀的矛盾(FileNotFound)以及不支持Flink的Lookup Join的問題。
Apache Paimon著重增強(qiáng)了流讀。Apache Paimon首先支持流讀原始數(shù)據(jù),實(shí)現(xiàn)全增量數(shù)據(jù)一體流讀。而在生成變更日志方面,Apache Paimon是以Full-compaction的方式生成變更日志,同時(shí)也支持多種生成方案,其中就包括Flink的Lookup Join。通過Apache Paimon生成的變更日志,時(shí)延也有所降低:Lookup 模式時(shí)延在1-3分鐘;Full-compaction 模式時(shí)延在3-10分鐘。
此外,Apache Paimon還有一個(gè)新的功能——Consumer-ID。Consumer-ID類似Kafka的GroupID,確保數(shù)據(jù)不會(huì)被淘汰,保證流讀的安全性。Consumer-ID也支持流讀無狀態(tài)重啟,解決流讀恢復(fù)時(shí)的FileNotFound的問題。
Apache Paimon在社區(qū)中的應(yīng)用實(shí)踐
以上都是從理論方面介紹Apache Paimon的獨(dú)特之處。而在實(shí)踐應(yīng)用中,Apache Paimon的表現(xiàn)又如何?接下來,李勁松主要介紹了Apache Paimon在阿里云計(jì)算平臺(tái)、字節(jié)跳動(dòng)、同程旅行及其它社區(qū)中的應(yīng)用實(shí)踐,展現(xiàn)出Apache Paimon出色的實(shí)踐能力。
阿里云計(jì)算平臺(tái)目前已達(dá)到了計(jì)算全集成,Apache Paimon替代Hudi成為實(shí)時(shí)入湖的首選。計(jì)算平臺(tái)可以通過實(shí)時(shí)計(jì)算Flink入湖,或通過CTAS、CDAS命令達(dá)到模型同步入湖,并進(jìn)行實(shí)時(shí)計(jì)算流讀。
而字節(jié)跳動(dòng)集成了Apache Paimon + Flink,解決了血緣管理和一致性管理問題,實(shí)現(xiàn)了真正意義上的Streaming Warehouse生產(chǎn)體系,讓每個(gè)數(shù)據(jù)流動(dòng)并沉淀。
同程旅行引入Apache Paimon,優(yōu)化了原有的Hudi近實(shí)時(shí)數(shù)倉,整體規(guī)模達(dá)到了上百個(gè)作業(yè),最大的表有90億+的數(shù)據(jù)。
除此以外,中原銀行、米哈游、Bilibili、塵鋒信息、汽車之家、巴別時(shí)代、海蘭寰宇等企業(yè)都在用Apache Paimon + Flink探索流式數(shù)倉,甚至是向流批一體近實(shí)時(shí)數(shù)倉的方向前進(jìn)。
Apache Paimon未來規(guī)劃
通過從理論和應(yīng)用實(shí)踐方面的介紹,不難看出Apache Paimon已經(jīng)解決了很多目前數(shù)據(jù)湖存在的問題。但是Apache Paimon的創(chuàng)新不止于此。在演講的最后,李勁松提到了Apache Paimon短期和長期的發(fā)展規(guī)劃,表明了未來的發(fā)展方向。
首先在短期內(nèi),Apache Paimon需要加強(qiáng)CDC場(chǎng)景、實(shí)現(xiàn)動(dòng)態(tài) Bucket 全自動(dòng)、創(chuàng)建Immutable Tag從而提供Immutable的離線版本、增強(qiáng)Append-Only處理以及Spark集成。
從長期發(fā)展來看, CDC實(shí)時(shí)數(shù)據(jù)湖需要在Apache Paimon中達(dá)到完全成熟的狀態(tài);其次,Append離線表達(dá)到生產(chǎn)可用的狀態(tài);最后,生態(tài)能夠達(dá)到全面對(duì)接,Spark集成完全成熟。
以上內(nèi)容整理自阿里云高級(jí)技術(shù)專家李勁松在WOT全球技術(shù)創(chuàng)新大會(huì)2023·北京站《大數(shù)據(jù)技術(shù)創(chuàng)新》專場(chǎng)中的精彩分享。獲取完整PPT請(qǐng)關(guān)注51CTO技術(shù)棧公眾號(hào),后臺(tái)發(fā)送【W(wǎng)OT2023PPT】即可直接領(lǐng)取。