背景
資料湖作為一個集中化的資料存儲倉庫,支援的資料類型具有多樣性,包括結構化、半結構化以及非結構化的資料,資料來源上包含資料庫資料、binglog增量資料、日志資料以及已有數倉上的存量資料等.資料湖能夠将這些不同來源、不同格式的資料集中存儲管理在高成本效益的存儲如OSS等對象存儲中,并對外提供統一的資料分析方式,有效解決了企業中面臨的資料孤島問題,同時大大降低了企業存儲和使用資料的成本.

由于資料湖資料來源的多樣性,如何簡單高效的将這些異構資料源的資料遷移到中心化的資料湖存儲中,是資料湖建構過程面臨的問題.為此,我們需要提供完善的一站式入湖的能力,解決我們面臨的問題,主要包括以下幾點:
- 支援異構資料源統一的入湖方式
提供一個簡單統一的入湖方式,使用者可以通過簡單的頁面配置實作異構資料源的入湖操作.
- 滿足資料入湖的時效性
對于日志、binglog等類型的資料源,需要實作分鐘級延遲的資料入湖能力,滿足實時互動式 分析場景對時效性的要求.
- 支援資料源的實時變更
對于資料庫、TableStore Tunnel等類型的資料源,源頭資料會經常發生變更,比如資料層面的update,delete等操作,甚至schema層面的字段結構變更. 需要利用更好的資料格式來支援這類變更行為.
為此,阿裡雲新推出了資料湖建構(Data Lake Formation,DLF)服務,提供了完整的一站式入湖解決方案。
整體方案
資料湖建構的入湖技術方案如下圖所示:
資料入湖整體上分為入湖模闆、入湖引擎、檔案格式以及資料湖存儲四個部分:
入湖模闆
入湖模闆定義了常見的資料源入湖方式,目前主要包括RDS全量模闆、DTS增量模闆、TableStore模闆、SLS模闆以及檔案格式轉換5種模闆.
使用者根據不同的資料源選擇相應的入湖模闆,然後填寫源頭相關參數資訊,即可完成入湖模闆的建立,并送出給入湖引擎運作.
入湖引擎
入湖引擎使用了阿裡雲EMR團隊自研的Spark Streaming SQL以及EMR Spark引擎,Streaming SQL基于Spark Structured Streaming,提供了相對完善的Streaming SQL文法,極大簡化了實時計算的開發成本。對于實時增量模闆,上層入湖模闆部分将入湖模闆翻譯成Streaming SQL,然後送出Spark叢集運作。我們在Streaming SQL裡面擴充了Merge Into文法來支援update、delete操作。對于RDS等全量模闆,則直接翻譯成Spark SQL運作。
檔案格式
DLF支援的檔案格式包括Delta Lake、Parquet、json等,更多檔案格式比如Hudi也在接入中。Delta Lake和Hudi等檔案格式能很好的支援update、delete等操作,同時支援schema merge功能。可以很好的解決資料源實時變更問題。
資料湖存儲
資料湖資料統一放在OSS對象存儲中,OSS提供了海量資料存儲的能力,同時在可靠性,價格等方面更具優勢.
一站式入湖方案在很好的解決了前面提的幾個問題:
通過模闆配置,實作了統一簡單的資料入湖方式.
通過自研Streaming SQL實作了分鐘級延遲的資料實時入湖,滿足了時效性要求.
通過引進Delta Lake等更優的檔案格式,實作了對update、delete等資料實時變更要求.
實時入湖
随着大資料的不斷發展,使用者對資料時效性的要求越來越高,實時入湖也是我們重點關注的場景,目前我們已經支援了DTS、TableStore以及SLS的實時入湖能力.
DTS增量資料實時入湖
DTS是阿裡雲提供了高可靠的資料傳輸服務,支援不同類型資料庫增量資料的訂閱和消費。我們實作了DTS實時訂閱資料的入湖,支援使用者已有訂閱通道入湖和自動建立訂閱通道入湖兩種方式,減少使用者配置成本。
在技術上,支援增量資料對曆史資料的update、delete變更操作,實作分鐘級延遲的資料變更感覺能力。技術實作上在Streaming SQL中擴充了merge into文法來對接底層檔案格式Delta Lake的相關接口.
MERGE INTO delta_tbl AS target
USING (
select recordType, pk, ...
from {{binlog_parser_subquery}}
) AS source
ON target.pk = source.pk
WHEN MATCHED AND source.recordType='UPDATE' THEN
UPDATE SET *
WHEN MATCHED AND source.recordType='DELETE' THEN
DELETE
WHEN NOT MATCHED THEN
INSERT *
和傳統數倉的binlog入倉相比,基于資料湖的方案具有更大的優勢. 在傳統數倉中,為了實作資料庫等變更資料的入倉,通常需要維護兩張表,一張增量表用于存放每天新增的資料庫變更明細資料,另外一張全量表,存放曆史所有的merge資料,全量表每天和增量表更據主鍵做merge操作. 顯然,基于資料湖方案在實作的簡單性和時效性上都更優.
TableStore實時入湖
TableStore是阿裡雲提供的是阿裡雲自研的NoSQL多模型資料庫,提供海量結構化資料存儲以及快速的查詢和分析服務.它同時支援了通道功能,支援變更資料的實時消費。我們支援TableStore全量通道、增量通道以及全量加增量通道的實作入湖.其中全量通道包含曆史全量資料,增量通道包含增量變化的資料,全量加增量通道則包含了曆史全量和增量變化的資料.
SLS日志實時入湖
SLS是阿裡雲提供的針對日志類資料的一站式服務,主要存放使用者日志資料。将SLS中的日志資料實時歸檔到資料湖中,進行分析處理可以充分挖掘資料中的價值。目前通過SLS入湖模闆,填寫project、logstore等少量資訊,即可完成日志實時入湖的能力。
總結展望
一站式入湖功能極大的降低了異構資料源入湖的成本,滿足了SLS、DTS等資料源入湖的時效性要求,同時也支援了資料源實時變更的能力。通過一站式入湖,将不同資料源的資料統一歸并到以OSS對象存儲為基礎架構的集中式資料湖存儲中,解決了企業面臨的資料孤島問題,為統一的資料分析打好了基礎.
後續一站式入湖一方面将繼續完善功能,支援更多類型的資料源,入湖模闆方面開放更多能力給使用者,支援自定義ETL的功能,提高靈活性。另一方面,将會在性能優化方面不斷投入,提供更好的時效性和穩定性。
更多資料湖技術相關的文章請點選:
阿裡雲重磅釋出雲原生資料湖體系更多資料湖相關資訊交流請加入阿裡巴巴資料湖技術釘釘群