
2023 年 3 月 12 日,F(xiàn)link Table Store 項(xiàng)目順利通過投票,正式進(jìn)入 Apache 軟件基金會(huì) (ASF) 的孵化器,改名為 Apache Paimon (incubating)。
隨著 Apache Flink 技術(shù)社區(qū)的不斷成熟和發(fā)展,越來越多企業(yè)開始利用 Flink 進(jìn)行流式數(shù)據(jù)處理,從而提升數(shù)據(jù)時(shí)效性價(jià)值,獲取業(yè)務(wù)實(shí)時(shí)化效果。與此同時(shí),在大數(shù)據(jù)領(lǐng)域數(shù)據(jù)湖架構(gòu)也日益成為新的技術(shù)趨勢(shì),越來越多企業(yè)開始采用 Lakehouse 架構(gòu),基于 DataLake 構(gòu)建新一代 Data Warehouse。因此,F(xiàn)link 社區(qū)希望能夠?qū)?Flink 的 Streaming 實(shí)時(shí)計(jì)算能力和 Lakehouse 新架構(gòu)優(yōu)勢(shì)進(jìn)一步結(jié)合,推出新一代的 Streaming Lakehouse 技術(shù),促進(jìn)數(shù)據(jù)在數(shù)據(jù)湖上真正實(shí)時(shí)流動(dòng)起來,并為用戶提供實(shí)時(shí)離線一體化的開發(fā)體驗(yàn)。
但目前業(yè)界主流數(shù)據(jù)湖存儲(chǔ)格式項(xiàng)目都是面向 Batch 場(chǎng)景設(shè)計(jì)的,在數(shù)據(jù)更新處理時(shí)效性上無(wú)法滿足 Streaming Lakehouse 的需求,因此 Flink 社區(qū)在一年多前內(nèi)部孵化了 Flink Table Store (簡(jiǎn)稱 FTS )子項(xiàng)目,一個(gè)真正面向 Streaming 以及 Realtime 的數(shù)據(jù)湖存儲(chǔ)項(xiàng)目, 截止目前已經(jīng)發(fā)布了 3 個(gè)版本,并得到了大量用戶的積極反饋和多家公司的積極貢獻(xiàn)。為了讓 Flink Table Store 能夠有更大的發(fā)展空間和生態(tài)體系,F(xiàn)link PMC 經(jīng)過討論決定將其捐贈(zèng) ASF 進(jìn)行獨(dú)立孵化。
截止目前,包括 阿里云,字節(jié)跳動(dòng)、Confluent、同程旅行、Bilibili 等多家公司參與到 Apache Paimon 的貢獻(xiàn),未來希望能夠有更多對(duì)新一代流式數(shù)據(jù)湖存儲(chǔ)感興趣的開發(fā)者加入 Paimon 社區(qū),一起打造新一代的流式湖倉(cāng)新架構(gòu)。
什么是 Apache Paimon
Apache Paimon (incubating) 是一項(xiàng)流式數(shù)據(jù)湖存儲(chǔ)技術(shù),可以為用戶提供高吞吐、低延遲的數(shù)據(jù)攝入、流式訂閱以及實(shí)時(shí)查詢能力。Paimon 采用開放的數(shù)據(jù)格式和技術(shù)理念,可以與 Apache Flink / Spark / Trino 等諸多業(yè)界主流計(jì)算引擎進(jìn)行對(duì)接,共同推進(jìn) Streaming Lakehouse 架構(gòu)的普及和發(fā)展。

開放的數(shù)據(jù)格式
Paimon 以湖存儲(chǔ)的方式基于分布式文件系統(tǒng)管理元數(shù)據(jù),并采用開放的 ORC、Parquet、Avro 文件格式,支持各大主流計(jì)算引擎,包括 Flink、Spark、Hive、Trino、Presto。未來會(huì)對(duì)接更多引擎,包括 Doris 和 Starrocks。
大規(guī)模實(shí)時(shí)更新
得益于 LSM 數(shù)據(jù)結(jié)構(gòu)的追加寫能力,Paimon 在大規(guī)模的更新數(shù)據(jù)輸入的場(chǎng)景中提供了出色的性能。
Paimon 創(chuàng)新的結(jié)合了 湖存儲(chǔ) + LSM + 列式格式 (ORC, Parquet),為湖存儲(chǔ)帶來大規(guī)模實(shí)時(shí)更新能力,Paimon 的 LSM 的文件組織結(jié)構(gòu)如下:

高性能更新:LSM 的 Minor Compaction,保障寫入的性能和穩(wěn)定性
高性能合并:LSM 的有序合并效率非常高
高性能查詢:LSM 的 基本有序性,保障查詢可以基于主鍵做文件的 Skipping
在最新的版本中,Paimon 集成了 Flink CDC,通過 Flink DataStream 提供了兩個(gè)核心能力:
實(shí)時(shí)同步 Mysql 單表到 Paimon 表,并且實(shí)時(shí)將上游 Mysql 表結(jié)構(gòu)(Schema)的變更同步到下游的 Paimon 表中。
實(shí)時(shí)同步 Mysql 整庫(kù)級(jí)別的表結(jié)構(gòu)和數(shù)據(jù)到 Paimon 中,同時(shí)支持表結(jié)構(gòu)變更的同步,并且在同步過程中復(fù)用資源,只用少量資源,就可以同步大量的表。
通過與 Flink CDC 的整合,Paimon 可以讓的業(yè)務(wù)數(shù)據(jù)簡(jiǎn)單高效的流入數(shù)據(jù)湖中。
數(shù)據(jù)表局部更新
在數(shù)據(jù)倉(cāng)庫(kù)的業(yè)務(wù)場(chǎng)景下,經(jīng)常會(huì)用到寬表數(shù)據(jù)模型,寬表模型通常是指將業(yè)務(wù)主體相關(guān)的指標(biāo)、維表、屬性關(guān)聯(lián)在一起的模型表,也可以泛指將多個(gè)事實(shí)表和多個(gè)維度表相關(guān)聯(lián)到一起形成的寬表。
Paimon 的 Partial-Update 合并引擎可以根據(jù)相同的主鍵實(shí)時(shí)合并多條流,形成 Paimon 的一張大寬表,依靠 LSM 的延遲 Compaction 機(jī)制,以較低的成本完成合并。合并后的表可以提供批讀和流讀:
批讀:在批讀時(shí),讀時(shí)合并仍然可以完成 Projection Pushdown,提供高性能的查詢。
流讀:下游可以看到完整的、合并后的數(shù)據(jù),而不是部分列。

流批一體數(shù)據(jù)讀寫
Paimon 作為一個(gè)流批一體的數(shù)據(jù)湖存儲(chǔ),提供流寫流讀、批寫批讀,你使用 Paimon 來構(gòu)建 Streaming Pipeline,并且數(shù)據(jù)沉淀到存儲(chǔ)中。
在 Flink Streaming 作業(yè)實(shí)時(shí)更新的同時(shí),可以 OLAP 查詢各個(gè) Paimon 表的歷史和實(shí)時(shí)數(shù)據(jù),并且也可以通過 Batch SQL,對(duì)之前的分區(qū) Backfill,批讀批寫。

不管輸入如何更新,或者業(yè)務(wù)要求如何合并 (比如 partial-update),使用 Paimon 的 Changelog 生成功能,總是能夠在流讀時(shí)獲取完全正確的變更日志。
當(dāng)面對(duì)主鍵表時(shí),為什么你需要完整的 Changelog:
你的輸入并不是完整的 changelog,比如丟失了 UPDATE_BEFORE (-U),比如同個(gè)主鍵有多條 INSERT 數(shù)據(jù),這就會(huì)導(dǎo)致下游的流讀聚合有問題,同個(gè)主鍵的多條數(shù)據(jù)應(yīng)該被認(rèn)為是更新,而不是重復(fù)計(jì)算。
當(dāng)你的表是 Partial Update,下游需要看到完整的、合并后的數(shù)據(jù),才可以正確的流處理。
你可以使用 Lookup 來實(shí)時(shí)生成 Changelog:

如果你覺得成本過大,你也可以解耦 Commit 和 Changelog 生成,通過 Full-Compaction 和對(duì)應(yīng)較大的時(shí)延,以非常低的成本生成 Changelog。
版本發(fā)布
Flink Table Store 已經(jīng)發(fā)布了三個(gè)版本,我們計(jì)劃在 4 月份發(fā)布 Paimon 0.4 版本,請(qǐng)您保持對(duì) Paimon 的關(guān)注。
Paimon 將長(zhǎng)期投入實(shí)時(shí)性、生態(tài)和數(shù)倉(cāng)完整性的研發(fā)上,構(gòu)建更好的 Streaming LakeHouse。
如果您有其他需求,請(qǐng)聯(lián)系我們。
致謝
感謝 Apache Flink 的伙伴們,有你們的支持,才有 Flink Table Store 的誕生
感謝項(xiàng)目孵化 Champion 李鈺老師,也感謝其他 Mentors: 秦江杰, Robert Metzger, Stephan Ewen
感謝來自阿里巴巴,字節(jié)跳動(dòng)、Confluent、同程旅行、Bilibili 的各位開發(fā)者
加入我們
官方網(wǎng)站: https://paimon.apache.org/
Github 項(xiàng)目: https://github.com/apache/incubator-paimon (歡迎大家 star&fork 支持)
釘釘交流群:10880001919 Apache Paimon 交流群
作者簡(jiǎn)介:
王峰 (莫問) Apache Flink 中文社區(qū)發(fā)起人、阿里巴巴開源大數(shù)據(jù)平臺(tái)負(fù)責(zé)人,PPMC Member of Apache Paimon
李勁松 (之信) 阿里巴巴開源大數(shù)據(jù)表存儲(chǔ)負(fù)責(zé)人,F(xiàn)ounder of Apache Paimon, PMC Member of Apache Flink