新聞中心
一、LakeSoul 設(shè)計(jì)理念和技術(shù)原理解讀
首先和大家分享 LakeSoul 的設(shè)計(jì)理念。

堅(jiān)守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都發(fā)電機(jī)維修小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站制作營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
1、LakeSoul 設(shè)計(jì)理念解析——背景
圖:LakeSoul 設(shè)計(jì)理念解析——背景
Modern Data Stack,簡稱 MDS,中文翻譯為現(xiàn)代數(shù)據(jù)棧,其特點(diǎn)之一就是數(shù)據(jù)上云,以云數(shù)據(jù)倉庫為核心。同時(shí)數(shù)倉采用計(jì)算和存儲(chǔ)分離的模式,計(jì)算資源可以彈性伸縮,滿足負(fù)載波峰波谷的變化,降低成本;存儲(chǔ)資源可以線性擴(kuò)大,高可用,無容量限制。
- 湖倉:在數(shù)據(jù)湖基礎(chǔ)設(shè)施上構(gòu)建數(shù)倉融合湖、倉各自的優(yōu)勢,湖倉一體能發(fā)揮出數(shù)據(jù)湖的靈活性與生態(tài)豐富性,以及數(shù)據(jù)倉庫的成熟性與企業(yè)級能力,幫助企業(yè)建立數(shù)據(jù)資產(chǎn)、實(shí)現(xiàn)數(shù)據(jù)業(yè)務(wù)化、進(jìn)而推進(jìn)全線業(yè)務(wù)智能化,實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)下的企業(yè)數(shù)據(jù)智能創(chuàng)新,全面支撐企業(yè)未來大規(guī)模業(yè)務(wù)智能落地。
- ELT:由 ETL 向 ELT 轉(zhuǎn)變,實(shí)時(shí)自動(dòng)化數(shù)據(jù)集成,增量式數(shù)據(jù)建模計(jì)算和查詢。
- 流批一體:流批統(tǒng)一計(jì)算鏈路、統(tǒng)一存儲(chǔ),統(tǒng)一數(shù)據(jù)鏈路,支持并發(fā)寫、Upsert、ACID、快照讀等功能。
- 多元應(yīng)用:BI/AI 一體化,多種計(jì)算模式、多種計(jì)算引擎直接讀取數(shù)據(jù),統(tǒng)一數(shù)據(jù)架構(gòu)和口徑。
2、LakeSoul設(shè)計(jì)理念解析——設(shè)計(jì)目標(biāo)
圖:LakeSoul 設(shè)計(jì)理念解析——設(shè)計(jì)目標(biāo)
LakeSoul 的設(shè)計(jì)目標(biāo)包括四部分,湖倉一體、流批一體、端到端實(shí)時(shí)以及 BI/AI 一體。
- 湖倉一體:針對計(jì)算存儲(chǔ)分離優(yōu)化設(shè)計(jì),在湖上低成本構(gòu)建大規(guī)模數(shù)倉。
- 流批一體:管理大規(guī)模的數(shù)據(jù)湖文件,支持高并發(fā)大批量的寫入、Upsert 更新,快照讀、回滾等機(jī)制。
- 端到端實(shí)時(shí):提供多源自動(dòng)實(shí)時(shí)數(shù)據(jù)入湖(CDC、Kafka),實(shí)時(shí)增量計(jì)算 Pipeline等功能,打造端到端簡單易用的實(shí)時(shí)數(shù)倉。
- BI/AI 一體:支持大數(shù)據(jù)、AI 模型訓(xùn)練多種計(jì)算框架,使用湖倉統(tǒng)一數(shù)據(jù)口徑。
3、LakeSoul 設(shè)計(jì)理念解析——時(shí)間線
圖:LakeSoul 設(shè)計(jì)理念解析——時(shí)間線
LakeSoul 時(shí)間線起源于大型推薦和廣告業(yè)務(wù)實(shí)時(shí)數(shù)據(jù)流場景,分五個(gè)階段:
- 2021.12前:LakeSoul 國產(chǎn)自研流批一體湖倉框架開源。
- 2021.12至2022.07:重構(gòu)元數(shù)據(jù),提升并發(fā)更新和事務(wù)能力。
- 2022.07至2022.10:發(fā)布 Flink CDC 多表自動(dòng)入湖,支持整庫同步,自動(dòng) DDL變更。
- 2022.10至2023.05:發(fā)布 Native IO,擴(kuò)大性能領(lǐng)先優(yōu)勢。LakeSoul 項(xiàng)目捐贈(zèng)給 Linux 基金會(huì)孵化。
- 2023.05至2023.6:發(fā)布全鏈路流式增量計(jì)算,自動(dòng)合并等領(lǐng)先功能通過國產(chǎn)信創(chuàng)認(rèn)證。
4、LakeSoul 技術(shù)解析——整體架構(gòu)
圖:LakeSoul 技術(shù)解析——整體架構(gòu)
LakeSoul 的整體架構(gòu)如上圖所示。包括三層,底層 LakeSoul Storage Layer 表示數(shù)據(jù)存儲(chǔ)層,中間 LakeSoul Query Engine 表示數(shù)據(jù)查詢引擎,最上層 LakeSoul Distributed Meta Service 表示分布式元數(shù)據(jù)服務(wù),左面是數(shù)據(jù)源,右面是加載數(shù)據(jù)和數(shù)據(jù)服務(wù)。
- LakeSoul Storage Layer:數(shù)據(jù)存儲(chǔ)層,支持的存儲(chǔ)包括 Amazon S3、HDFS、MINIO、阿里云OSS 等,通過 Cloud Storage Driver、Hot Data cache 加載數(shù)據(jù)到數(shù)據(jù)存儲(chǔ)層。
- LakeSoul Query Engine:支持多種計(jì)算引擎包括 Spark、Flink、Hive 等,讀取存儲(chǔ)層數(shù)據(jù)進(jìn)行加工、分析、建模等。
- LakeSoul Distributed Meta Service:分布式元數(shù)據(jù)服務(wù),包括元數(shù)據(jù)管理-Schema Manage、數(shù)據(jù)事務(wù)管理-ACID Control、數(shù)據(jù)分布/狀態(tài)-Data Distrbution/Stats 等功能。
- 數(shù)據(jù)源:包括流數(shù)據(jù)-Streaming Data 和批數(shù)據(jù)-Batch Data。
- 數(shù)據(jù)服務(wù):數(shù)據(jù)服務(wù)包括BI和AI兩塊,支持AI使用結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。
5、LakeSoul 技術(shù)解析——數(shù)據(jù)格式
圖:LakeSoul 技術(shù)解析——數(shù)據(jù)格式
下面看一下 LakeSoul 的數(shù)據(jù)格式。
- 表物理數(shù)據(jù)組織:使用 Parquet 格式存儲(chǔ);按主鍵哈希分片,單個(gè)文件內(nèi)按主鍵排序;支持多級 Range 分區(qū)。
- 表元數(shù)據(jù)組織:支持表、分區(qū)、文件多級管理。每次提交會(huì)產(chǎn)生一個(gè)新的版本 Version,每次提交版本號會(huì)遞增。
6、LakeSoul 技術(shù)解析——元數(shù)據(jù)(元數(shù)據(jù)管理)
圖:LakeSoul 技術(shù)解析——元數(shù)據(jù)(元數(shù)據(jù)管理)
元數(shù)據(jù),主要包括分區(qū)信息表 Partition_info、數(shù)據(jù)提交信息表 Data_commit_info、表信息表 Table_info、表名 ID 信息表 Table_name_id 和表路徑 ID 信息表 Table_path_id 等。
中心化的元數(shù)據(jù)管理包括以下內(nèi)容:
- 使用 PostgreSQL 作為存儲(chǔ):PostgreSQL 是開源的對象-關(guān)系數(shù)據(jù)庫數(shù)據(jù)庫管理系統(tǒng),支持豐富的數(shù)據(jù)類型(如 JSON 和 JSONB 類型、數(shù)組類型)和自定義類型。
- 使用 PG 事務(wù)實(shí)現(xiàn)并發(fā)控制、ACID 等能力
- 使用 PG 兩階段提交協(xié)議用于數(shù)據(jù)并發(fā)讀寫時(shí)沖突檢測
- 使用 PG Trigger 機(jī)制實(shí)現(xiàn)事件訂閱,用于觸發(fā)自動(dòng) Compaction 等
7、LakeSoul 技術(shù)解析——元數(shù)據(jù)(兩階段提交協(xié)議)
圖:LakeSoul 技術(shù)解析——元數(shù)據(jù)(兩階段提交協(xié)議)
元數(shù)據(jù)的兩階段提交協(xié)議,在 Spark/Flink 流/批作業(yè)寫數(shù)據(jù)時(shí)執(zhí)行,發(fā)生沖突時(shí)會(huì)進(jìn)行重試或者失敗等。
8、LakeSoul 技術(shù)解析——元數(shù)據(jù)(自動(dòng)并發(fā)沖突解決機(jī)制)
圖:LakeSoul 技術(shù)解析——元數(shù)據(jù)(自動(dòng)并發(fā)沖突解決機(jī)制)
細(xì)分作業(yè)寫入時(shí)數(shù)據(jù)提交類型,不同類型之間沖突時(shí)會(huì)采取如下幾種措施:
- 直接重試提交:兼容的寫沖突(Append、Merge)
- 重新排列 Commit:Compaction、Update 的部分情況
- 不兼容沖突:并發(fā)全量 Update 等,提交失敗
9、LakeSoul 技術(shù)解析——元數(shù)據(jù)(自動(dòng)演進(jìn)和快照管理)
圖:LakeSoul 技術(shù)解析——元數(shù)據(jù)(自動(dòng)演進(jìn)和快照管理)
LakeSoul 還提供了 Schema 自動(dòng)演進(jìn)和快照管理的能力。
Schema 自動(dòng)演進(jìn):
- 在寫時(shí)自動(dòng)處理 Schema 變更。
- 允許并發(fā)進(jìn)行變更,不需要停作業(yè)再執(zhí)行 DDL。
- 讀數(shù)據(jù)自動(dòng)兼容,讀數(shù)據(jù)自動(dòng)兼容包括新增加列:舊數(shù)據(jù)自動(dòng)補(bǔ)充 null;刪除列:舊數(shù)據(jù)自動(dòng)過濾該列;提升類型精度:舊數(shù)據(jù)自動(dòng)執(zhí)行 Upcast。
元數(shù)據(jù)快照管理:
- 快照讀、快照回滾、快照清理
- 默認(rèn)讀取最新的快照
10、LakeSoul 技術(shù)解析——Native IO(設(shè)計(jì)理念和設(shè)計(jì)原理)
圖:LakeSoul 技術(shù)解析——Native IO(設(shè)計(jì)理念和設(shè)計(jì)原理)
Native IO 的設(shè)計(jì)主要考慮了以下方面:
- Upsert、MOR 讀寫的封裝:包括屏蔽讀寫實(shí)現(xiàn)細(xì)節(jié),與計(jì)算引擎無關(guān) ;向上提供簡潔的 Writer、Reader 接口。
- 多引擎對接:包括方便對接各類 SQL、AI 引擎;支持向量化計(jì)算引擎;C、Java、Python 多語言支持。
- 高性能:包括針對對象存儲(chǔ)讀寫優(yōu)化;嚴(yán)格的內(nèi)存占用控制。
- 實(shí)現(xiàn)原理如下:
- 基于 Rust、Apache Arrow-rs 和 DataFusion 實(shí)現(xiàn)異步 Writer、Reader:包括使用 Parquet 作為存儲(chǔ)格式;Writer:主鍵排序(支持磁盤 spill)、異步并發(fā)Multipart upload;Reader:異步 Parquet RowGroup Prefetch、MOR 主鍵有序歸并。
- 封裝 C Interface。
- 通過 jnr-ffi/ctypes 進(jìn)一步封裝 Java、Python 接口。
11、LakeSoul 技術(shù)解析——Native IO(性能對比)
圖:LakeSoul 技術(shù)解析——Native IO(性能對比)
上圖是 Spark 讀寫 AWS S3的性能對比。可以看到:
- Spark 讀 AWS S3 讀性能 Parquet Scan 對比:Native IO 遠(yuǎn)高于 Parquet-mr。
- Spark 讀 AWS S3 寫性能 Parquet Write 對比:Native IO 高于 Parquet-mr。
測試報(bào)告鏈接https://github.com/meta-soul/LakeSoul/tree/main/lakesoul-spark/src/test/scala/org/apache/spark/sql/lakesoul/benchmark/io
二、LakeSoul 核心功能和優(yōu)勢
接下來介紹 LakeSoul 的核心功能和優(yōu)勢。
1、LakeSoul 核心功能——入湖
圖:LakeSoul 核心功能——入湖
首先要介紹的核心功能是入湖。LakeSoul 流批一體表存儲(chǔ)系統(tǒng)由 Spark 湖倉表、Flink 湖倉表、Schema 自動(dòng)演進(jìn)、計(jì)算與存儲(chǔ)彈性擴(kuò)容、并發(fā)寫入更新等功能模塊組成。其中 Spark湖倉表模塊實(shí)現(xiàn)了使用 Spark SQL 語句創(chuàng)建湖倉表、向表中插入數(shù)據(jù)、更新表中已有數(shù)據(jù)、讀取湖倉中的表、讀取表的歷史快照、回滾到表的歷史版本等功能;Flink湖倉表模塊實(shí)現(xiàn)了使用 Flink SQL 語句創(chuàng)建湖倉表、向表中插入數(shù)據(jù)、批量讀取湖倉表、流式全量讀取湖倉表、流式增量讀取湖倉表等功能;Schema 自動(dòng)演進(jìn)模塊實(shí)現(xiàn)了 Schema 變更時(shí)自動(dòng)兼容讀取表的舊數(shù)據(jù)等功能;被測系統(tǒng)支持計(jì)算與存儲(chǔ)能力的彈性擴(kuò)容;支持對同一個(gè)表的同一個(gè)分區(qū)進(jìn)行并發(fā)寫入更新。
多源數(shù)據(jù)實(shí)時(shí)入湖包括以下能力:
- 數(shù)據(jù)庫多表實(shí)時(shí)入湖、Kafka 多 topic 實(shí)時(shí)入湖。
- 支持 Flink CDC、Debezium 等多種 CDC 采集工具。
- 自動(dòng)發(fā)現(xiàn)新表、自動(dòng) DDL 變更。
- 精確一次(Exactly Once):消息不會(huì)丟失,也不會(huì)被重復(fù)發(fā)送。
2、LakeSoul 核心功能——增量計(jì)算
圖:LakeSoul 核心功能——增量計(jì)算
第二個(gè)核心功能是增量計(jì)算,LakeSoul 表在 CDC 讀寫時(shí)具有以下特性:
- 讀寫均兼容 Flink Changelog Stream。
- 增量讀取 CDC 流。
- 全量讀取合并后數(shù)據(jù)。
3、 LakeSoul 核心功能——多流拼接
圖:LakeSoul 核心功能——多流拼接
第三個(gè)是多流拼接,原生支持多流并發(fā)寫入拼接。
- 多個(gè)流可以是異構(gòu)的,只要有相同主鍵列即可。
- 其余列可以不同。
- 消除 Join 計(jì)算,降低延遲,減少資源消耗。
4、LakeSoul 核心功能——權(quán)限和血緣
圖:LakeSoul 核心功能——權(quán)限和血緣
第四是權(quán)限和血緣方面的功能。權(quán)限方面,實(shí)現(xiàn)了通用的 RBAC 的權(quán)限控制功能,用到了 PG 數(shù)據(jù)庫本身的 RBAC 和行級別安全策略的功能。為了實(shí)現(xiàn)細(xì)粒度的表級別的權(quán)限控制,還用到了 Casbin。綜合這些功能點(diǎn),實(shí)現(xiàn)了較為完善的權(quán)限控制,并且對各引擎都是統(tǒng)一的。
數(shù)據(jù)血緣功能,采用了開源的 OpenLineage 協(xié)議來上報(bào)血緣關(guān)系。
5、LakeSoul 核心功能——自動(dòng)維護(hù)
圖:LakeSoul 核心功能——自動(dòng)維護(hù)
第五是自動(dòng)維護(hù)功能。自動(dòng)維護(hù)包括自動(dòng)全局 Compaction 服務(wù),以及自動(dòng)清理過期數(shù)據(jù)服務(wù)。
使用 PostgreSQL 的 Trigger 功能實(shí)現(xiàn)了如下功能:
- 達(dá)到 Compaction /清理?xiàng)l件時(shí)觸發(fā)事件。
- 使用 Spark 作業(yè)監(jiān)聽事件并執(zhí)行 Compaction /清理操作。
- Spark 作業(yè)可以彈性伸縮。
6、LakeSoul 核心功能——性能評測
圖:LakeSoul 性能評測
上圖中展示了性能評測的一些數(shù)據(jù),分別以 Hudi、Iceberg、LakeSoul 三種產(chǎn)品進(jìn)行寫 Write、讀 Read 測試。測試時(shí)提供兩種類型的表:寫時(shí)復(fù)制(Copy on Write,COW)表和讀時(shí)合并(Merge On Read,MOR)表,對于 Copy-On-Write Table,用戶的 update 會(huì)重寫數(shù)據(jù)所在的文件,所以是一個(gè)寫放大很高,但是讀放大為 0,適合寫少讀多的場景。對于 Merge-On-Read Table,整體的結(jié)構(gòu)有點(diǎn)像 LSM-Tree,用戶的寫入先寫入到 delta data 中,這部分?jǐn)?shù)據(jù)使用行存,這部分 delta data 可以手動(dòng) merge 到存量文件中,整理為 parquet 的列存結(jié)構(gòu)。
測試代碼和數(shù)據(jù)如下:
- https://github.com/meta-soul/ccf-bdci2022-datalake-contest-examples/tree/mor。
- https://github.com/meta-soul/ccf-bdci2022-datalake-contest-examples/tree/cow。
測試方式如下:
- 第一批插入1000萬行數(shù)據(jù)。
- 分10次插入100萬行數(shù)據(jù)
- MOR讀取時(shí)沒有執(zhí)行過Compaction。
測試結(jié)論為:
S3云對象存儲(chǔ)數(shù)據(jù)讀取:讀取 1000 萬行數(shù)據(jù),執(zhí)行三次,平均讀取時(shí)間 17.770秒,讀性能相比 Spark 3.3.2 提升 1.722 倍;
S3 云對象存儲(chǔ)數(shù)據(jù)寫入:寫入 1000 萬行數(shù)據(jù),執(zhí)行三次,平均寫入時(shí)間 43.194 秒,寫性能相比 Spark 3.3.2 提升 1.800倍;
Merge on Read 場景下數(shù)據(jù)讀取:讀取 2000 萬行數(shù)據(jù),執(zhí)行三次,平均讀取時(shí)間 25.811 秒,讀性能相比 Iceberg 1.1.0提升 1.420倍,相比 Hudi 0.12.2 提升 2.541倍;
Merge on Read 場景下數(shù)據(jù)寫入:寫入 2000 萬行數(shù)據(jù),執(zhí)行三次,平均寫入時(shí)間 266.628 秒,寫性能相比 Iceberg 1.1.0提升 5.832 倍,相比 Hudi 0.12.2 提升 12.209 倍。
三、LakeSoul 應(yīng)用場景和案例
接下來分享 LakeSoul 的一些應(yīng)用場景和案例。
1、LakeSoul 應(yīng)用場景——構(gòu)建實(shí)時(shí)湖倉
圖:LakeSoul 應(yīng)用場景——構(gòu)建實(shí)時(shí)湖倉
構(gòu)建完整的實(shí)時(shí)湖倉一體鏈路包括:
- 多源數(shù)據(jù)實(shí)時(shí)入湖
- 全量、增量一體化分析
- 實(shí)時(shí)增量計(jì)算
- BI、AI 多種上層應(yīng)用
2、LakeSoul 應(yīng)用場景——實(shí)時(shí)機(jī)器學(xué)習(xí)
圖:LakeSoul 應(yīng)用場景——實(shí)時(shí)機(jī)器學(xué)習(xí)
構(gòu)建實(shí)時(shí)機(jī)器學(xué)習(xí)樣本包括:
- 使用 LakeSoul 多流拼接功能
- 將多個(gè)特征流、標(biāo)簽流實(shí)時(shí)拼接
- 將樣本流式傳入機(jī)器學(xué)習(xí)訓(xùn)練,實(shí)現(xiàn)在線學(xué)習(xí)
四、LakeSoul 開源社區(qū)進(jìn)展和未來規(guī)劃
最后介紹一下 LakeSoul 開源社區(qū)進(jìn)展和未來規(guī)劃。
1、LakeSoul 開源社區(qū)
圖:LakeSoul 開源社區(qū)
LakeSoul 于2021年底開源,采用 Apache License 2.0協(xié)議,成為國內(nèi)首個(gè)開源湖倉框架。2023年5月將項(xiàng)目捐贈(zèng)給 Linux 基金會(huì),在 Linux Foundation AI & Data 基金會(huì)技術(shù)委員會(huì)答辯會(huì)議上,我們介紹了 LakeSoul 開源項(xiàng)目,得到了在場技術(shù)委員們的一致高度評價(jià),成功通過投票,正式成為 Linux 基金會(huì)的孵化項(xiàng)目。成為 Linux Foundation AI & Data 旗下 Sandbox 項(xiàng)目。
未來 LakeSoul 項(xiàng)目將在 Linux 基金會(huì)的指引下,秉承開源、開放、協(xié)作的理念,全面建設(shè)發(fā)展 LakeSoul 開源社區(qū)。數(shù)元靈公司也將一如既往地全力支持 LakeSoul 開源項(xiàng)目和社區(qū),持續(xù)貢獻(xiàn)核心功能和特性。在這里,我們也真誠邀請廣大開發(fā)者和用戶參與到社區(qū)中來,共同打造新一代湖倉一體開源框架。
https://github.com/lakesoul-io/LakeSoul。
2、LakeSoul 未來演進(jìn)方向
圖:LakeSoul 未來演進(jìn)方向
隨著 LakeSoul 新版本的發(fā)布,進(jìn)入 Linux 基金會(huì)孵化和通過國產(chǎn)信創(chuàng)認(rèn)證,LakeSoul 項(xiàng)目的發(fā)展揭開了新的篇章。LakeSoul 近期還將陸續(xù)推出一系列更新:在功能方面,將會(huì)增加內(nèi)置角色權(quán)限控制、數(shù)據(jù)質(zhì)量校驗(yàn)等功能點(diǎn),進(jìn)一步完善數(shù)倉能力;在生態(tài)方面,將會(huì)推出原生 Python 讀取接口并與多種 AI 框架對接,成為 AI 大模型的新一代數(shù)據(jù)底座。
未來 LakeSoul 將繼續(xù)圍繞功能、生態(tài)和性能這三方面進(jìn)行迭代。
功能方面:
- 數(shù)據(jù)質(zhì)量規(guī)則自動(dòng)化校驗(yàn)
- 原生 Python Reader
- Hadoop/K8s 自動(dòng)化部署
生態(tài)方面:
- 支持更多數(shù)據(jù)庫入湖
- Kafka Connect Sink
- LogStash Sink
- Presto Connector
性能方面:
- 提升 MOR 性能
- Minor compaction
- 支持引擎向量化計(jì)算
- 本地緩存
網(wǎng)站題目:國產(chǎn)開源湖倉LakeSoul--數(shù)據(jù)智能的未來方向
文章地址:http://m.fisionsoft.com.cn/article/ccdcjdo.html


咨詢
建站咨詢
