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