參考:Apache PAIMON:實時數據湖技術框架及其實踐
數據湖不僅僅是一個存儲不同類數據的技術手段,更是提高數據分析效率、支持數據驅動決策、加速AI發展的基礎設施。
新一代實時數據湖技術,Apache PAIMON兼容Apache Flink、Spark等主流計算引擎,并支持流批一體化處理、快速查詢和性能優化,成為加速AI轉型的重要工具。
Apache PAIMON是一個支持大規模實時數據更新的存儲和分析系統,通過 LSM 樹(日志結構合并樹)和列式存儲格式(如 ORC/Parquet)實現高效查詢。它與 Flink 深度集成,可整合 Kafka、日志、業務數據庫的變更數據,支持批流一體處理,實現低延遲、實時更新和快速查詢。
相比其他數據湖框架(如 Apache Iceberg 和 Delta Lake),PAIMON獨特地提供了對批流一體化的原生支持,不僅能高效處理批量數據,還能對變更數據(如 CDC)實時響應。它也兼容多種分布式存儲系統(如 OSS、S3、HDFS),并集成了 OLAP 工具(如 Spark、StarRocks、Doris),確保安全存儲與高效讀取,為企業的快速決策和數據分析提供靈活支持。
PAIMON主要技術場景
1. Flink CDC 將數據引入數據湖
PAIMON經過優化,使這個過程更簡單、更高效。通過一鍵攝取,便可將整個數據庫引入數據湖,從而大大降低架構的復雜性。它支持實時更新和低成本快速查詢。此外,它還提供靈活的更新選項,允許應用特定列或不同類型的聚合更新。
2. 構建流式數據管道
PAIMON可用于構建完整的流式數據管道,其主要功能包括:
生成ChangeLog,允許流式讀取訪問完全更新的記錄,從而更輕松地構建強大的流式數據管道。
PAIMON也正在發展為具有消費者機制的消息隊列。最新版本引入了變更日志的生命周期管理,可讓用戶定義它們的保留時間,類似于 Kafka(例如,日志可以存儲七天或更長時間)。這創建了一個輕量級、低成本的流媒體管道解決方案。
3. 超快速 OLAP 查詢
雖然前兩個用例可確保實時數據流,但 PAIMON還支持高速 OLAP 查詢來分析存儲的數據。通過結合LSM和Index,PAIMON 可以實現快速數據分析。其生態系統支持Flink、Spark、StarRocks、Trino等多種查詢引擎,都可以高效查詢PAIMON中存儲的數據。
參考:Paimon助力數據湖倉架構實時化升級-阿里云開發者社區
數據架構的存儲演進
Data LakeHouse是Lake到Warehouse的完美結合。它的基本含義是一個文件或者對象存儲,可以存儲任何你想要的任何東西。包括結構化數據、非結構化數據,json,其中非結構化數據包括圖片、視頻、音頻之類的數據,Data Lake是一個非常通用的、非常粗糙的、非常底層的底層存儲。
近幾年誕生湖格式的東西,包括Iceberg、Hudi、Delta湖格式的東西,它通過文件的重新定義,把文件管理起來,管理的就不僅是一個目錄,它管目錄下每一個文件,它通過slap sort、manifest?file的機制把每個文件的引用管理起來,這張表就具有版本的效果,也具有更細粒度控制的效果。
舉例說明,把文件管起來之后ACID的能力,可以避免類似的目錄,也可以有一些基于文件的data skipping的,也可以支撐delete update?merge into細粒度的操作。最后也可以支持時間旅行包括回滾、Branch,?Tag的能力。
Paimon實時數據湖
Paimon實時數據湖的出發點是Streaming加實時。數據湖格式上做Streaming的處理,Hive公開的每個引擎都能進行讀寫格式,它是一個非常open的格式,這里把它叫做shared?database storage for batch processing。在批處理上一個被所有計算引擎share的格式,Iceberg?包括Hudi?,Delta在Hive的基礎上演化出來的更進一步的ACID的處理,這里把Iceberg叫做shared?databasestorage for batch processing,像數據倉庫更像數據庫的存儲,有更進一步的能力。
Paimon出發點是在Iceberg基礎上這些東西還不夠,最大能給業務帶來效果的是streaming,是實時化,是時效性。所以Paimon不僅是batch processing包括batch processing, streaming procession,olap processing,所以它是結合湖格式加LSM技術,把時效性帶到數據湖。
Paimon的生態體系結構已經非常的廣,底下基于HDVS,OSS或者stream的存儲介質。在上面基于文件的格式ORC,包括阿里的ORC,parquet。左邊是CDCingest各種數據源入湖到Paimon中。右邊是它支持各種各樣的sacred query的computer engine,包括Flink流的,Flink包括批的Spark StarRocks,包括一系列的社區的計算引擎,最新的版本也提出Paimon?Python API,通過Paimon Python API解鎖機器學習,來自包括rag,Python一系列的生態,包括通過error格式的轉換。支撐包括pandas之類的計算框架。
Paimon最開始的名字叫Flink Table store。Paimon不僅是一個Flink存儲,它是一個通用,公開,被共享的湖格式。對接的包括Flink流計算Spark StarRocks等一系列的引擎,預計在11月份發布1.0版本,預計Paimon在批,在流,在Olap已經達到非常完善的程度,在1.0當中會引入來自AI相關的集成,讓Paimon成為真正能處理非結構化數據的數據湖格式。
最新Paimon發布0.9版本是一個功能非常完善的一個版本,補充完善有缺陷的futures,并且核心增強了包括victor ,組件化letive的查詢對接來自StarRocks的C++的查詢,也兼容Spark生態,可以通過Spark生態查詢Paimon的數據,最后優化對象存儲的文件,包括文件緩存 文件格式
數據湖實時流式處理
實時流式處理讓業務的時效性加強,從天級的時效性降低到分鐘級。基于Paimon數據湖的VP的處理,成本不會增加特別多。成本可控的情況下,時效性增加,時延降低,整體呈現出一套批流完全一體的存儲計算架構。以前用Kafka中間來做流處理,因為Kafka不可查,所以anyway最后需要可以查詢的引擎,比如需要把數據寫到StarRocks上,StarRocks才可查。Paimon作為一個湖格式,它是可以批寫批讀,也可以流寫流讀,它把整條streaming鏈路建立起來,每一層都實時可查。架構能做到完全的流批一體,不是流批割裂的兩套架構。
Paimon的能力有三個,第一個是它可以支持更新的數據入湖。第二個特性是能流讀流寫。流讀流寫不是簡單的把數據流讀流寫,可以給Paimon聲明一張圖組件表,組件表就可以表現的像MYSQL,也可以實時的流式的更新數據,組件表也能實時的產生Change log給下游的消費,能做到非常準確的類似number架構,CPA架構。因為它是基于存儲來產生Change log,它能做到最正確的計算,所以在很多場景當中,它能做到流一份數據沉淀下來,不用批寫批讀,做批的刷新。最后一個場景是每一層都是可以被包括StarRocks包括Spark引擎實時查詢。Paimon針對這些引擎做非常多的優化,能保證查詢性能不弱于正常的批查詢。
第一個場景就數據庫CDC入湖,可以通過Flink CDC,各種connector包括mysql CDC包括mongo?DB的CDC包括OCEANBASE一系列的CDC的能力。用Paimon包括社區Paimon提供的Paimon?CDC的入湖方式,可以用最新的一個Flink CDC?3.1基于young的入湖方式定義數據集成的數據傳輸的腳本鏈路。schema evolution ,schema跟著變來自源頭的數據schema變,下面的Paimon表的schema也跟著變,也可以用類似整庫同步的能力進一步節省資源,降低運維難度。
第二個是湖上的全鏈路流式ETL,定義Paimon的merge engine,可以定義partial-update,也可以定義Aggregation的merge engine。基于把計算存入到存儲的技術,也可以通過Paimon取代類似join的部分列更新,也可以基于Paimon定義聚合表,整體寫入Paimon后定義Paimon?merge engine,之后也可以定義Change log?producer讓Paimon表實時的產生Change log,但是產生的Change log是需要不小的代價。
最后是湖上的Olap的加速,分為兩個部分,第一個部分是實時數據的Olap。可以定義一個組件表,它接受上游數據的實時更新。實時更新的過程當中,可以通過StarRocks類似的引擎實時的查詢,所以在社區推出一個組件表的deletion victor模式,基于deletion victor模式,它可以讓存儲本身和c++向量化更好的集成,可以讓查詢性能得到數倍的提升。離線數據直接Olap,可能會掃描全表的數據,Paimon也支持對離線數據做z-order排序。做z-order排序之后,在查詢的時候就可以基于排序的range過濾大量的文件,Paimon在社區有文件索引。通用文件索引支持Bloom Filter,也支持最新的Bitmap進一步過濾不需要的文件。加強Olap的性能。
數據湖非結構化處理
接觸到數據湖格式之后,會發現數據湖是一個結構化的處理,它是一個表,需要定義字段。Paimon在最新的版本當中也會推出Paimon?object Table,希望通過Object Table管理非簡化的數據,包括在OOS或者HDFS上的圖片,視頻,文件,音頻之類的文件。Object Table方式通過一個視圖,不操作這些文件,相當于是在后臺建立文件的索引。把這些文件的原數據寫到數據湖當中,通過這樣的結構化視圖就可以查詢到Object Table,對一個目錄或者多個目錄的原數據的映射。拿到這些原數據之后就可以通過包括pySpark ,Flink SQL ,Spark SQL 等,通過這種結構化的處理,讀表知道有哪些文件,這些文件的文件大小可以做一些過濾,也可以把這些文件讀出來做一些處理,所以通過這樣的方式把非結構化和結構化的SQL的處理,或者結構化的計算引擎的處理結合到一起,讓整個結構化的處理更簡單。可以把這些非結構化的數據通過結構化的方式管理起來,包括權限管理對接到正常的數倉的權限管理當中。
在Flink當中,在SQL當中也支持Model的一些處理,包括Model的預測,案例是假如根據training數據訓練出Model,可以在Flink SQL中定義Model,然后也可以在SQL中定義Object Table映射到目錄中的文件,通過純SQL的調用,通過Model預測針對object數據做預測,通過純SQL的方式產出一個模型預測數據處理的效果。通過Paimon的object table的方式可以把這套體系融入到SQL的處理當中,融入到傳統的大數據計算的分布式處理當中,是案例的簡單的SQL處理,可以create Model,create?object table,通過predict模型預測的函數,做模型的預測處理。
Paimon可以管Model,包括非結構化數據。SQL的結構化處理模型預測也可以得到結果,整個非結構化數據得到數據版本和管理,從而可以得到學員的依賴管理。也可以把結果數據和其他結構化數據進行join,以及進行聯合的計算。
參考:Flink+Paimon實時數據湖倉實踐分享-CSDN博客
在 Flink 實時數據開發中,對于依賴大量狀態 state?的場景,如長周期的累加指標計算、回撤長歷史數據并更新等,使用實時數倉作為中間存儲來代替 Flink 的內部狀態 state 是非常有必要的。
?
Apache Paimon是一種流批統一的數據湖存儲格式,結合 Flink 可以構建流批處理的實時湖倉一體架構。Paimon 具有實時更新的能力(可應用于對時效性要求不太高的場景,如 1-5 分鐘),其主鍵表支持大規模更新寫入,具有非常高的更新性能,同時也支持定義合并引擎,按照自定義的方式更新記錄。
Paimon 底層使用 OSS/HDFS 等作為存儲,同時數據文件以 LSMtree 的格式進行組織,具有更優的實時數據更新能力和完整的流處理能力。
對象存儲服務(Object Storage Service)它是一種海量、安全、低成本、高可靠的云存儲服務。適用于存儲各種類型的非結構化數據,比如圖片、視頻、文檔等。
?
1. 低成本、可擴展性:實時數倉產品也可以作為 flink 的中間存儲,比如 hologres,但是 Paimon 的存儲成本約為其的 1/9(通過查詢官網,OSS 的存儲為 0.12 元/GB/月,Hologres 為 1 元/GB/月)。同時數據湖相比于數據倉庫可以與更多的大數據引擎(Hive/Spark/Trino 等等)兼容,解決數據孤島和數據冗余存儲的問題。
2. 實時性能:相比于其他的數據湖產品,Paimon 是天然面向 Flink 設計而誕生的,相比于 hudi(面向 Spark 批處理設計)、Iceberg 等,Paimon在與 Flink 結合具有更優的處理大批量數據的 upsert 能力,同時數據更新時效性最短可支持到 1 分鐘,且性能穩定。
使用 Paimon 作為中間存儲進行維表 JOIN,可以解決 Flink 內部狀態 state 成本高、不可重啟、存儲周期短等限制,從而滿足復雜實時場景的數據開發需求,同時這些中間存儲結果也可以通過流/批的形式被 ODPS/Hologres 等大數據引擎消費,實現數據統一