數(shù)據(jù)湖核心能力解析
一、數(shù)據(jù)湖發(fā)展趨勢分析
當下,數(shù)據(jù)湖已成為企業(yè)數(shù)據(jù)平臺架構(gòu)的重要組成部分。傳統(tǒng)的數(shù)據(jù)平臺架構(gòu)一般由數(shù)據(jù)湖、流式計算和 OLAP 引擎查詢?nèi)齻€部分組成:
數(shù)據(jù)湖:由Hadoop搭建的大數(shù)據(jù)平臺承載,負載海量數(shù)據(jù)存儲與批量計算。
流式計算:一般由Flink組件承載,負責實時的數(shù)據(jù)流處理。
OLAP數(shù)倉:可選擇技術(shù)比較多,包括:開源的Doris、StarRocks、Clickhouse等以及傳統(tǒng)數(shù)倉,負責承載數(shù)據(jù)查詢業(yè)務(wù)。
這三個平臺在以往通常是獨立建設(shè)的,集群也是獨立部署。三者之間數(shù)據(jù)互相拉通,采用以下方案:
湖平臺與流式平臺的互通:通常采用 Lambda 架構(gòu)搭建實時計算平臺和離線批量計算平臺,以實現(xiàn)流式計算與數(shù)據(jù)湖之間的協(xié)同。
流式計算平臺與 OLAP 倉互通:一般實際與計算引擎的數(shù)據(jù)源對接方式拉通,還會基于 Kappa 架構(gòu)在流式計算中進行實時的數(shù)據(jù)加工處理,將計算結(jié)果寫入數(shù)倉中,以實現(xiàn)實時的 OLAP 查詢,這也是通常講的實時數(shù)倉解決方案。
湖平臺與數(shù)倉平臺互通:一般是通過數(shù)據(jù)拷貝方式,將數(shù)據(jù)湖的原始數(shù)據(jù)或者批量計算結(jié)果數(shù)據(jù)復(fù)制一份到數(shù)倉當中。
以上的解決方案存在一些問題。首先,從建設(shè)和維護的角度來看,這種架構(gòu)需要分別建設(shè)三個平臺,導(dǎo)致建設(shè)與維護成本增大;其次,數(shù)據(jù)共享需要進行一定的冗余存儲和數(shù)據(jù)拷貝,導(dǎo)致方案復(fù)雜讀變高。因此大家現(xiàn)在在逐漸嘗試將三個功能平臺融合到一起,形成融合數(shù)據(jù)湖。
在融合數(shù)據(jù)湖中,將通過流批一體的架構(gòu)實現(xiàn)實時計算和批量計算的數(shù)據(jù)共享,解決數(shù)據(jù)冗余和數(shù)據(jù)搬遷的問題。通過湖內(nèi)建倉的方式,在數(shù)據(jù)湖實現(xiàn)數(shù)倉的能力,構(gòu)建 OLAP 能力,避免了數(shù)據(jù)的搬遷。這種融合數(shù)據(jù)湖的架構(gòu)不僅可以提高數(shù)據(jù)處理的效率,還可以降低數(shù)據(jù)平臺的建設(shè)和維護成本,實現(xiàn)數(shù)據(jù)的共享和流通。
二、數(shù)據(jù)湖整體架構(gòu)
上圖是一個基于開源技術(shù)的數(shù)據(jù)湖參考架構(gòu),從數(shù)據(jù)流上分為幾個環(huán)節(jié):
數(shù)據(jù)源 :數(shù)據(jù)流的起點,來源于業(yè)務(wù)系統(tǒng),包括業(yè)務(wù)數(shù)據(jù)庫、消息流、日志等。
數(shù)據(jù)集成 :數(shù)據(jù)湖架構(gòu)中的重要環(huán)節(jié)。數(shù)據(jù)集成是業(yè)務(wù)系統(tǒng)與數(shù)據(jù)湖之間的橋梁,實現(xiàn)入湖和出湖的能力。通過批量和實時能力,可以實現(xiàn) T+1 和 T+0 的集成能力。根據(jù)業(yè)務(wù)訴求和具體業(yè)務(wù)架構(gòu)選擇不同的集成方式。
數(shù)據(jù)存儲: 采用開源的 Lakehouse 技術(shù)進行數(shù)據(jù)存儲管理。底層的存儲引擎可以采用 Hadoop 的 HDFS 組件也可以采用對象存儲引擎。存儲格式采 Parquet 和 ORC 格式,這些格式提供了高效的壓縮和編碼方式,有助于提升數(shù)據(jù)的存儲和處理效率?;?Lakehouse 技術(shù),構(gòu)建數(shù)倉能力,例如:ACID 能力、Update 能力、Schema 的演進,以及查詢加速的緩存和索引技術(shù)。
數(shù)據(jù)計算 :采用支持流批一體的計算引擎,如 Spark 和 Flink,也可以基于 Hive 引擎進行批量計算。
湖內(nèi)交互式分析: 通過交互式查詢引擎 Presto、Trino 等,實現(xiàn)對湖內(nèi)數(shù)據(jù)進行查詢分析,通過湖存儲的加速技術(shù)加持,查詢性能也可以實現(xiàn)秒級時延。
OLAP層 :在湖內(nèi)進行數(shù)據(jù)加工處理完成后,需要更快速的查詢能力,通過數(shù)據(jù)集成同步到 OLAP 組件,根據(jù)具體業(yè)務(wù)需求,我們可以選擇不同的組件,如 CK 大寬表的快速查詢和 HBase KV 查詢等。當前部分 OLAP 組件也可以直接查詢湖內(nèi)數(shù)據(jù),避免了數(shù)據(jù)搬遷。
以上環(huán)節(jié)組合形成完整數(shù)據(jù)平臺架構(gòu),滿足多種業(yè)務(wù)場景的技術(shù)訴求。
三、數(shù)據(jù)集成
數(shù)據(jù)集成是業(yè)務(wù)系統(tǒng)與數(shù)據(jù)湖之間的橋梁,要面對多種不同的數(shù)據(jù)源。在流批一體的數(shù)據(jù)湖平臺中,數(shù)據(jù)集成主要分為批量集成和實時集成兩種方式。
批量集成 :采用定時周期性的搬遷方式,將上游數(shù)據(jù)一次性搬遷到數(shù)據(jù)湖,或者將數(shù)據(jù)湖的數(shù)據(jù)搬遷到 OLAP 組件,例如 Sqoop、DataX 等開源組件,通過 JDBC 連接到源數(shù)據(jù)庫,將數(shù)據(jù)抽取出來并寫入數(shù)據(jù)湖中。這種方式適用于對時效性要求不高的場景,面臨的挑戰(zhàn)主要是大數(shù)據(jù)量的集成帶來的吞吐壓力。
實時集成 :采用上游數(shù)據(jù)變更觸發(fā)的數(shù)據(jù)搬遷方式,通常采用實時增量技術(shù)采集上游數(shù)據(jù)。通常會利用開源技術(shù)如 Flink CDC(Change Data Capture)來實現(xiàn)數(shù)據(jù)庫的實時數(shù)據(jù)捕獲,將這些變化的數(shù)據(jù)采集到Kafka 等消息隊列中或者直接入湖實現(xiàn)實時入湖。采用增量讀取的方式將數(shù)據(jù)湖新變更數(shù)據(jù)同步到 OLAP 組件層,例如:采用 Flink 實時讀取 Hudi 的新增數(shù)據(jù)寫入 Doris。這種實時集成方式極大地提高了數(shù)據(jù)的時效性。
在實時集成中挑戰(zhàn):
完整性保證:區(qū)別于批量集成,實時集成是實時采集每一條變更的新數(shù)據(jù),在異常場景要保證數(shù)據(jù)不丟。
有序性保證:在流式計算中數(shù)據(jù)流有更新操作,數(shù)據(jù)是否保序會影響到計算結(jié)果的準確性,例如:上游數(shù)據(jù)庫對同一主鍵記錄更新多次,數(shù)據(jù)集成會采集到多條記錄,如果亂序那計算結(jié)果就會錯誤。
穩(wěn)定性保證:日常的業(yè)務(wù)通常會有波峰波谷的出現(xiàn),在實時集成通道要有能力保證流量增大也能保證任務(wù)運行的穩(wěn)定性,可以通過加強監(jiān)控的方式發(fā)現(xiàn)問題,通過彈性伸縮能力或者上線前壓測,保證任務(wù)的資源分配到位,或者通過限流措施犧牲波峰的時效性來保證穩(wěn)定性。
隨著技術(shù)的發(fā)展,一些開源工具已經(jīng)能夠?qū)崿F(xiàn)流批一體的實時數(shù)據(jù)集成,這些工具不僅可以降低建設(shè)成本,還能夠減少技術(shù)復(fù)雜度。
四、Lakehouse核心能力
在數(shù)據(jù)湖的存儲層,Lakehouse 技術(shù)的應(yīng)用為數(shù)據(jù)處理和分析帶來了革命性的變革。Lakehouse 不僅繼承了數(shù)據(jù)湖的靈活性和可擴展性,還引入了數(shù)據(jù)倉庫的關(guān)鍵特性,如 ACID 事務(wù)、強一致性 Schema 管理、SQL 查詢等。以下是Lakehouse 技術(shù)應(yīng)具備的關(guān)鍵能力:
增強的DML SQL能力:Lakehouse新增了update、upsert和merge into等操作,數(shù)據(jù)湖也具備了更新能力。
Schema Evolution:業(yè)務(wù)系統(tǒng)不斷演進過程中,會帶來表結(jié)構(gòu)的變更,傳統(tǒng)大數(shù)據(jù)在該場景通常采用的是重新建表的方式。Lakehouse支持Alter table能力,保證數(shù)據(jù)湖表可以更加靈活的適配業(yè)務(wù)的演進發(fā)展。
ACID事務(wù)和多版本支持:為了確保數(shù)據(jù)的一致性和完整性,Lakehouse應(yīng)提供ACID事務(wù)支持,并在異常情況下提供數(shù)據(jù)的回滾能力。多版本支持則允許訪問歷史數(shù)據(jù),為數(shù)據(jù)的時間旅行提供可能。
并發(fā)控制:在多用戶環(huán)境中,Lakehouse應(yīng)能夠處理并發(fā)讀寫操作,確保數(shù)據(jù)的一致性和準確性。這包括對同一張表的并發(fā)寫入以及在讀寫操作中的嚴格一致性保證。
時間旅行:Lakehouse應(yīng)支持時間旅行功能,使用戶能夠訪問任意時間點的數(shù)據(jù)快照。這不僅為數(shù)據(jù)回溯和歷史分析提供了便利,還支持了流式的增量讀取能力。
文件存儲優(yōu)化:為了支持高效的OLAP查詢,Lakehouse應(yīng)優(yōu)化數(shù)據(jù)存儲格式,以便在特定場景下能夠快速檢索數(shù)據(jù)。
流批一體處理:Lakehouse應(yīng)同時支持流式和批量的數(shù)據(jù)讀寫,實現(xiàn)數(shù)據(jù)的一體化存儲和處理,滿足多樣化的數(shù)據(jù)處理需求。
索引構(gòu)建:為了加速OLAP查詢,Lakehouse提供了索引構(gòu)建能力,以滿足業(yè)務(wù)對查詢時延的要求。
自動化管理:Lakehouse具備自動化管理能力,包括數(shù)據(jù)的合并、歷史數(shù)據(jù)的清理、索引的構(gòu)建等,以減輕用戶的維護負擔,并提高數(shù)據(jù)平臺的可靠性和穩(wěn)定性。
五、Lakehouse開放性設(shè)計
在現(xiàn)代數(shù)據(jù)湖的 Lakehouse 架構(gòu)中,保持開放性的設(shè)計原則是至關(guān)重要的。這種開放性體現(xiàn)在幾個關(guān)鍵方面:
數(shù)據(jù)格式的開放性:Lakehouse架構(gòu)應(yīng)確保其支持的數(shù)據(jù)格式具有開放性。這意味著使用標準化的、與開源社區(qū)廣泛兼容的數(shù)據(jù)格式,如Parquet和ORC。這種開放的數(shù)據(jù)格式允許Lakehouse與各種數(shù)據(jù)處理工具和計算引擎無縫對接,無論是開源的還是商業(yè)的。例如,Apache Spark、Presto和Flink等流行的開源計算引擎都能夠高效地讀取和寫入這些開放格式的數(shù)據(jù)。
計算引擎的開放性:Lakehouse架構(gòu)還應(yīng)支持多種開源和商業(yè)計算引擎的接入。這種開放性確保了企業(yè)可以根據(jù)具體的業(yè)務(wù)需求和數(shù)據(jù)處理的場景,選擇最合適的計算引擎。無論是實時數(shù)據(jù)處理、批處理還是交互式查詢,Lakehouse都能夠與各種計算引擎協(xié)同工作,提供高效的數(shù)據(jù)處理能力。
元數(shù)據(jù)與數(shù)據(jù)權(quán)限的集成:在Lakehouse中,元數(shù)據(jù)和數(shù)據(jù)權(quán)限管理是數(shù)據(jù)管理的基本能力要求。這種能力不僅確保了數(shù)據(jù)的組織和管理效率,還提供了精細的數(shù)據(jù)訪問控制,保障了數(shù)據(jù)的安全性和合規(guī)性。
多云部署能力:Lakehouse架構(gòu)應(yīng)支持多云部署策略,包括在私有云和公共云環(huán)境中的部署。這種靈活性確保了企業(yè)可以根據(jù)自身的業(yè)務(wù)需求和資源狀況,選擇最合適的部署環(huán)境,同時保證了平臺的持續(xù)穩(wěn)定演進。
六、流批一體
流批一體架構(gòu)是現(xiàn)代數(shù)據(jù)處理平臺的核心特征之一,它實現(xiàn)了數(shù)據(jù)存儲、計算的深度融合。流批一體通常包含三種解釋:
數(shù)據(jù)存儲的流批一體:同一份數(shù)據(jù)既支持流式讀取也支持批量讀取。物理上數(shù)據(jù)存儲是一份。這種存儲模式確保了數(shù)據(jù)的一致性,并減少了數(shù)據(jù)冗余。
計算引擎的流批一體:指流式計算和批量計算可以由同一個計算引擎完成。例如,Apache Flink和Apache Spark都支持流批一體的數(shù)據(jù)處理。這種方式可以降低架構(gòu)復(fù)雜度,降低開發(fā)者的使用門檻。
數(shù)據(jù)處理代碼的流批一體化:指數(shù)據(jù)處理的代碼可以同時適用于流式和批量的方式執(zhí)行。這樣可以降低開發(fā)成本,同時保證流批的任務(wù)代碼邏輯一致性。
在流批一體架構(gòu)中,全鏈路支持批量和實時ETL計算。在數(shù)據(jù)倉庫的各分層中,企業(yè)可以采用批量計算來保證小時級和天級的處理能力,同時利用實時計算來保證分鐘級的數(shù)據(jù)處理能力。通過數(shù)據(jù)的統(tǒng)一處理,企業(yè)可以實現(xiàn)分鐘級的數(shù)據(jù)可見性,并確保數(shù)據(jù)的一致性,避免批處理和流處理數(shù)據(jù)結(jié)果的不一致性。
七、實時OLAP
OLAP 能力是實現(xiàn)快速數(shù)據(jù)分析和決策支持的關(guān)鍵。為了滿足業(yè)務(wù)對快速響應(yīng)和高效處理的需求,需要提供秒級的查詢時延和數(shù)百級別的并發(fā)查詢能力。隨著業(yè)務(wù)的發(fā)展具體的能力會有所變動,在面對業(yè)務(wù)量的大幅波動時,基于數(shù)據(jù)湖架構(gòu)能夠迅速擴展計算能力,以應(yīng)對高業(yè)務(wù)壓力的挑戰(zhàn)。
此外,基于容器化的部署能力,數(shù)據(jù)湖可以實現(xiàn)根據(jù)業(yè)務(wù)量的彈性伸縮。這種靈活性不僅提高了資源利用率,還確保了在高峰時段能夠提供足夠的計算資源,以滿足業(yè)務(wù)需求。在業(yè)務(wù)量減少時,資源可以相應(yīng)地縮減,以優(yōu)化成本效率。
八、湖內(nèi)建倉
在數(shù)據(jù)湖架構(gòu)中,湖內(nèi)建倉的概念是將數(shù)據(jù)倉庫的能力集成到數(shù)據(jù)湖內(nèi)部,以實現(xiàn)數(shù)據(jù)的高效管理和分析。這一過程涉及多層的存儲優(yōu)化和數(shù)據(jù)組織。
首先,在數(shù)據(jù)文件層,我們實施存儲優(yōu)化技術(shù),如排序存儲和哈希分布,以提高數(shù)據(jù)文件的訪問效率。此外,我們還進行數(shù)據(jù)打散和內(nèi)容組織優(yōu)化,以進一步加速 OLAP 查詢。
接下來是索引層的構(gòu)建。為了加速計算過程,采用與數(shù)據(jù)倉庫類似的技術(shù),包括數(shù)據(jù)裁剪、下推和緩沖等,以優(yōu)化計算性能。同時,提供統(tǒng)一的元數(shù)據(jù)服務(wù),確保數(shù)據(jù)資產(chǎn)的統(tǒng)一視圖,并統(tǒng)一數(shù)據(jù)開發(fā)中的數(shù)據(jù)庫管理。
在數(shù)倉模型方面,繼續(xù)使用傳統(tǒng)的數(shù)倉分層存儲模型,如 ODS、DWS 和ADS,同時根據(jù)業(yè)務(wù)需求對數(shù)據(jù)進行主題域劃分,以實現(xiàn)更精細的數(shù)據(jù)管理。
在表模型方面,采用常見的快照表模型和拉鏈表模型進行數(shù)據(jù)存儲,并根據(jù)需要采用其他模型。通過這些方式,我們能夠在數(shù)據(jù)湖內(nèi)部實現(xiàn)數(shù)倉的數(shù)據(jù)管理能力和數(shù)據(jù)處理能力。