湖倉才是數(shù)據(jù)智能的未來?那你必須了解下國產(chǎn)唯一開源湖倉了
國產(chǎn)唯一的開源數(shù)據(jù)湖存儲框架 LakeSoul 近期發(fā)布了 2.0 升級版本,讓數(shù)據(jù)智能觸手可及。
湖倉一體作為新一代大數(shù)據(jù)技術(shù)架構(gòu),將逐漸取代單一數(shù)據(jù)湖和數(shù)倉架構(gòu),成為大數(shù)據(jù)架構(gòu)的演進方向。當前已有 DeltaLake、Iceberg、Hudi 等國外開源的數(shù)據(jù)湖存儲框架。LakeSoul 是數(shù)元靈科技研發(fā)的,國產(chǎn)唯一的開源數(shù)據(jù)湖存儲框架,并于近期發(fā)布了 2.0 升級版本。本文將結(jié)合大數(shù)據(jù)架構(gòu)的演變歷史及業(yè)務需求,深度剖析國產(chǎn)唯一開源湖倉一體框架 LakeSoul 帶來的現(xiàn)代化數(shù)據(jù)架構(gòu)和關(guān)鍵業(yè)務價值。
數(shù)據(jù)架構(gòu)的演進
從傳統(tǒng)數(shù)據(jù)庫到數(shù)倉再到數(shù)據(jù)湖,數(shù)據(jù)架構(gòu)一直伴隨著業(yè)務需求的驅(qū)動不斷迭代,使數(shù)據(jù)應用場景向復雜化、多元化轉(zhuǎn)變,從最初的交易場景,到分析場景,再到混合場景、復雜分析場景,最后到如今的實時混合場景,大數(shù)據(jù)架構(gòu)也在不斷演進:
在數(shù)據(jù)架構(gòu)演進中,不同的架構(gòu)方案也存在著缺陷:
1. 傳統(tǒng)數(shù)倉。傳統(tǒng)數(shù)據(jù)倉庫作為一個中心化的數(shù)據(jù)源,仍然沿用了數(shù)據(jù)庫的架構(gòu),即計算存儲耦合在一起,不方便擴展,成本較高。并且中心數(shù)據(jù)倉庫通常需要專門團隊來開發(fā)維護,面對紛繁的業(yè)務需求往往存在響應不及時等問題。2.Hadoop 數(shù)倉。目前有大量的企業(yè)使用 Hadoop + Hive 的方式搭建數(shù)據(jù)倉庫。然而由于 Hive 無法支持實時、流式的場景,需要通過 Lambda 架構(gòu)維護實時、批量兩套數(shù)據(jù)處理邏輯,帶來重復開發(fā)、數(shù)據(jù)口徑不一致、架構(gòu)復雜等問題。3. 數(shù)據(jù)湖。數(shù)據(jù)湖使用云上的對象存儲,能夠解決存儲擴展性問題。然而數(shù)據(jù)湖原先是為存儲任意類型的數(shù)據(jù)所設(shè)計,缺乏對元數(shù)據(jù)的組織管理,容易形成數(shù)據(jù)沼澤,難以發(fā)揮數(shù)據(jù)的價值。4. 湖倉一體。湖倉一體作為新一代架構(gòu),仍然需要解決 Hadoop/Lambda 架構(gòu)的固有缺陷,即實時、批量無法統(tǒng)一。甚至由于對象存儲的一些問題,實時計算的存儲變得更加困難,性能也難以滿足新興的業(yè)務需求;各類 SQL、AI 的計算框架與對象存儲的適配也不完善。
數(shù)元靈科技認為,解決以上各類問題,首先需要有一套完善的湖倉存儲,在云上提供數(shù)據(jù)高并發(fā)、高吞吐讀寫的能力和完整的數(shù)倉管理能力,并且將這樣的存儲能力以通用的方式提供給多種計算引擎訪問;這也是數(shù)元靈科技研發(fā) LakeSoul 的初衷。
LakeSoul :構(gòu)建現(xiàn)代化數(shù)據(jù)智能架構(gòu)
LakeSoul 是北京數(shù)元靈科技自主研發(fā)的湖倉一體存儲框架,也是目前國內(nèi)唯一的開源湖倉平臺。LakeSoul 開源項目地址:https://github.com/meta-soul/LakeSoul
作為現(xiàn)代化的數(shù)據(jù)智能架構(gòu)的底層支撐,LakeSoul 具有以下幾個核心能力:
1. 流批一體的存儲
LakeSoul 在存儲層面,統(tǒng)一支持實時和批量兩種方式對湖倉中的數(shù)據(jù)進行更新寫入和讀取,不再需要分別開發(fā)兩套不同的數(shù)據(jù)鏈路。這一方面大幅降低了開發(fā)成本,也消除了兩套鏈路帶來的數(shù)據(jù)口徑不一致等問題,并且使用者不再需要維護多個存儲系統(tǒng),能夠節(jié)省大量資源成本。
2. 在數(shù)據(jù)湖上構(gòu)建數(shù)據(jù)倉庫
通過 LakeSoul 在數(shù)據(jù)湖上構(gòu)建數(shù)據(jù)倉庫,能夠充分利用云原生架構(gòu)下對計算資源和存儲資源的彈性能力。LakeSoul 針對對象存儲做了專門的性能優(yōu)化,在數(shù)據(jù)湖上構(gòu)建出完整的實時數(shù)倉功能,支持數(shù)據(jù)的實時更新寫入。湖倉一體化的方式大幅簡化基礎(chǔ)設(shè)施的使用門檻,并極大提升資源利用效率和性能。
3. 支持多種數(shù)據(jù)計算引擎
數(shù)據(jù)的價值釋放有多種方式,包括如報表分析和算法模型落地等。LakeSoul 在統(tǒng)一的湖倉存儲層之上,支持多種計算引擎,提供涵蓋數(shù)據(jù)實時導入、數(shù)據(jù)分析、BI 報表、AI 模型訓練等多種計算模式。使用一套湖倉存儲即可完成全鏈路的實時數(shù)據(jù)智能業(yè)務搭建,開箱即用。開發(fā)者能夠?qū)WI(yè)務數(shù)據(jù)的處理邏輯,構(gòu)建以數(shù)據(jù)為中心的開發(fā)范式。
LakeSoul 通過統(tǒng)一的實時、批量存儲的核心能力,構(gòu)建了流批一體、湖倉一體、分析智能一體的現(xiàn)代湖倉數(shù)據(jù)智能架構(gòu)。
基于 LakeSoul 的湖倉智能架構(gòu)如下圖所示:
LakeSoul 的核心技術(shù)特性解讀
1. 高可擴展的 Catalog 元數(shù)據(jù)服務
隨著數(shù)據(jù)量的快速增長,數(shù)據(jù)倉庫需要能夠處理快速增加的分區(qū)和文件。LakeSoul 使用 PostgreSQL 數(shù)據(jù)庫來存儲 Catalog 信息,提升元數(shù)據(jù)可擴展性和事務并發(fā)能力。
LakeSoul 通過精心組織元數(shù)據(jù)層表的主鍵和索引,對一個葉子級別分區(qū)只需要做一次主鍵操作就可以獲得這個分區(qū)的所有信息,以及讀寫當前版本的 snapshot 等。一個分區(qū)的 snapshot 中包含了全量寫入和增量更新的文件完整路徑和提交類型。通過對 snapshot 中文件提交進行順序的遍歷,就可以構(gòu)建出該分區(qū)讀取計劃。這樣一方面分區(qū)信息訪問很高效,另一方面也避免了對文件目錄的遍歷,對于 S3、OSS 這樣的對象存儲系統(tǒng)是比較重要的優(yōu)化手段。LakeSoul 的分區(qū)管理機制示意:
2. 支持并發(fā)寫和 ACID 事務
LakeSoul 通過元數(shù)據(jù)服務實現(xiàn)了并發(fā)控制,在同一分區(qū)支持多個作業(yè)并發(fā)更新,通過智能區(qū)分寫入類型來控制合并或回退機制。具體來說,當計算引擎產(chǎn)出要提交的各個分區(qū)的文件后,會首先提交分區(qū)文件更新的信息,例如全量更新或增量更新,然后通過元數(shù)據(jù)事務操作來更新讀者可見的版本。在檢測到并發(fā)更新發(fā)生的場景,LakeSoul 會自動區(qū)分寫入類型判斷是否屬于有沖突情形,并決定是自動解決沖突還是需要回退數(shù)據(jù)計算。沖突檢測的具體規(guī)則如下表所示(X 表示這種沖突不能自動解決,會通過拋異常的方式交給業(yè)務層處理):
3. 支持增量寫入和 Upsert 更新
LakeSoul 提供了增量追加和行列級別 Upsert 的功能,支持 Merge on Read 模式,提升數(shù)據(jù)攝入的靈活性和性能。LakeSoul 實現(xiàn)了高效的 Merge on Read,在表具有主鍵的情況下,LakeSoul 支持了更為高效的 Upsert 機制。在每個主鍵哈希分桶內(nèi),LakeSoul 將文件根據(jù)主鍵進行排序。執(zhí)行多次 Upsert 后,就獲得了多個有序的文件。對于讀取作業(yè),只需要將這些有序文件進行歸并,即可完成 Merge on Read。Upsert 的示意如下:
通過這樣的方式,寫入時不需要讀取并合并數(shù)據(jù),提供了很高的寫入性能。而經(jīng)過優(yōu)化的 Merge Reader 保證了讀性能不受損失。
4. 實時數(shù)倉功能
LakeSoul 支持流式和批量的寫入,行列級別更新,通過 SQL 即可完成絕大部分更新操作,使用體驗更接近于數(shù)據(jù)庫。同時,LakeSoul 支持 MVCC 多版本控制,并提供了快照讀(Time Travel)和版本回滾的功能。在 2.0 版本更新中,還支持了 Flink CDC 實時寫入,通過將 CDC 更新流轉(zhuǎn)化為 LakeSoul 的 Upsert 操作,能夠?qū)崿F(xiàn)高效的實時入湖。通過對接 Flink Table API,同樣能夠通過幾行 SQL 完成在線數(shù)據(jù)庫的 CDC 入湖。
5. 開放生態(tài)
LakeSoul 使用 Parquet 作為文件存儲格式,支持云上對象存儲,并提供抽象統(tǒng)一的存儲訪問層,能夠很方便的對接各類計算引擎。目前能夠支持 Spark、Flink,并支持將表分區(qū)自動導入到 Hive Meta 中。近期 LakeSoul 還將支持對接 Presto 等 MPP 計算引擎,從而更加完整地支持 ETL、OLAP、AI 模型訓練等各類數(shù)據(jù)智能計算業(yè)務。
LakeSoul 的業(yè)務價值
LakeSoul 現(xiàn)代湖倉數(shù)據(jù)智能架構(gòu)能夠帶來如下幾個核心業(yè)務價值:
- 大幅簡化數(shù)據(jù)智能架構(gòu),降低運維成本
- 計算成本降低,不需要多套存儲
- 不依賴 Kafka 或 Flink 等有狀態(tài)服務
- 避免資源潮汐效應
- 簡化開發(fā)流程,降低人力成本
- 使用 SQL、Python 即可快速開發(fā)數(shù)據(jù)智能業(yè)務
- 現(xiàn)有數(shù)倉邏輯可以快速遷移,改造難度低
- 數(shù)據(jù)可靠,狀態(tài)可見透明,提升數(shù)據(jù)使用效率
- 每層計算結(jié)果實時可見、可查詢,數(shù)據(jù)可復用
- 上游補數(shù)、修復簡單快捷,避免單點故障
- 避免數(shù)據(jù)孤島、數(shù)據(jù)冗余、數(shù)據(jù)沼澤
- 全鏈路 T+0 實時計算
- 計算延遲大幅降低,天級降低到分鐘級
- 業(yè)務效果快速反饋
LakeSoul 應用場景舉例
1. 實時數(shù)據(jù)快速導入湖倉
使用 LakeSoul 提供的 Flink CDC Sink 功能,可以將在線數(shù)據(jù)庫的變更實時同步到 LakeSoul 湖倉,不再需要 T+1 導入作業(yè),從數(shù)據(jù)源頭實現(xiàn)實時化。并且得益于 Flink CDC,也不再需要額外部署 Kafka 等組件。實時數(shù)據(jù)入湖的架構(gòu)流程:
可以看到 LakeSoul 實時入湖只需要一條流式的鏈路即可完成入湖,不需要額外的批處理流程,既簡化開發(fā)工作量,消除數(shù)據(jù)口徑不一致,也簡化了部署架構(gòu),顯著降低了運維成本。
2. 實時分析報表
LakeSoul 的流批一體更新的特性,使得報表開發(fā)者不需要使用復雜的計算引擎接口來開發(fā)流式計算的作業(yè),通過 SQL 即可完成實時的數(shù)據(jù)提取和轉(zhuǎn)換和開發(fā),無論是 ETL 還是數(shù)據(jù)分析的流程都更加簡單:
通過 LakeSoul 能夠快速上線實時 BI 報表,隨時高效支撐商業(yè)決策。
3. AI 應用落地
在互聯(lián)網(wǎng)搜廣推業(yè)務中,需要不斷積累用戶的實時反饋,并結(jié)合歷史數(shù)據(jù)進行模型訓練,自然是流批一體發(fā)揮巨大價值的重要場景。通過 LakeSoul 可以很好地支持實時搜廣推的 Online Learning 范式,構(gòu)建實時的機器學習樣本庫,無縫對接 AI 模型的實時訓練和在線推理,實現(xiàn)數(shù)據(jù)智能化的應用。
結(jié)語
LakeSoul 作為當前國產(chǎn)唯一的開源湖倉一體框架,近期發(fā)布了 2.0 版本,增加了 Flink CDC、快照回滾、Hive 對接等業(yè)務生態(tài)功能,進一步增強和豐富了在實際生產(chǎn)環(huán)境中的業(yè)務落地能力。LakeSoul 帶來現(xiàn)代化的湖倉數(shù)據(jù)智能架構(gòu),能夠大幅降低數(shù)據(jù)智能應用的開發(fā)運維門檻,讓數(shù)據(jù)智能成為觸手可及的技術(shù),充分釋放數(shù)據(jù)的業(yè)務價值紅利。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。