在之前的實(shí)時(shí)湖倉系列文章中,我們已經(jīng)介紹了實(shí)時(shí)湖倉對(duì)于當(dāng)前企業(yè)數(shù)字化轉(zhuǎn)型的重要性,實(shí)時(shí)湖倉的功能架構(gòu)設(shè)計(jì),以及實(shí)時(shí)計(jì)算和數(shù)據(jù)湖結(jié)合的應(yīng)用場(chǎng)景。
在本篇文章中,將介紹袋鼠云數(shù)棧在構(gòu)建實(shí)時(shí)湖倉系統(tǒng)上的探索與落地實(shí)踐,及未來規(guī)劃。
數(shù)棧為什么選擇實(shí)時(shí)湖倉
數(shù)棧作為一個(gè)數(shù)據(jù)開發(fā)平臺(tái),在未引入實(shí)時(shí)湖倉之前提供的是基于 Lambda 架構(gòu)的開發(fā)模式,分了實(shí)時(shí)和離線兩條鏈路,這種開發(fā)模式帶來的問題在于:
· 復(fù)雜性高,需要維護(hù)流批雙鏈路的不同組件
· 存儲(chǔ)成本高,流批兩個(gè)鏈路維護(hù)兩份相同的數(shù)據(jù)
· 實(shí)時(shí)鏈路不可查,Kafka 中間數(shù)據(jù)查詢困難,不支持隨機(jī)查詢,只支持順序查詢
· 數(shù)據(jù)口徑一致性差,不同計(jì)算引擎難保證統(tǒng)一的數(shù)據(jù)口徑
而實(shí)時(shí)湖倉則能夠節(jié)省存儲(chǔ)成本,極大地提升開發(fā)效率,并更快更好地挖掘數(shù)據(jù)價(jià)值。
· 提供了多樣化的分析能力,不限于批處理、流處理,在交互式查詢和機(jī)器學(xué)習(xí)方面都很友好
· 提供了 ACID 事物能力,可以更好的保障數(shù)據(jù)質(zhì)量,并提供增刪改查等功能,傳統(tǒng)數(shù)倉則缺乏這一能力
· 提供了完善的數(shù)據(jù)管理能力,包括數(shù)據(jù)格式、數(shù)據(jù) Schema 等
· 提供了存儲(chǔ)介質(zhì)可擴(kuò)展的能力,支持 HDFS、對(duì)象存儲(chǔ)、云上存儲(chǔ)等
數(shù)?;趯?shí)時(shí)湖倉的實(shí)踐
下圖便是基于實(shí)時(shí)湖倉的數(shù)棧解決方案結(jié)構(gòu)圖:
業(yè)務(wù)庫中的數(shù)據(jù)我們通過自研的數(shù)據(jù)集成框架 ChunJun 進(jìn)行實(shí)時(shí)采集和入湖,目前支持 Iceberg/Hudi 實(shí)時(shí)入湖。之后在數(shù)棧實(shí)時(shí)開發(fā)平臺(tái)和離線開發(fā)平臺(tái)中進(jìn)行業(yè)務(wù)的開發(fā),F(xiàn)link 和 Spark 支持對(duì)接 Iceberg/Hudi,以及 Iceberg/Hudi source 指標(biāo)展示。再通過 EasyLake 湖倉一體平臺(tái)進(jìn)行數(shù)據(jù)管理,如一鍵轉(zhuǎn)表、湖表治理等。
基于此,實(shí)時(shí)湖倉很好地解決了上文提到的 Lambda 架構(gòu)開發(fā)模式帶來的痛點(diǎn)問題。實(shí)現(xiàn)了存儲(chǔ)層和計(jì)算層的流批一體,實(shí)時(shí)鏈路中間數(shù)據(jù)可查,統(tǒng)一的數(shù)據(jù)口徑,低成本存儲(chǔ),為企業(yè)帶來更快、更靈活、更高效的數(shù)據(jù)處理體驗(yàn),這就是數(shù)棧原則實(shí)時(shí)湖倉的原因。
下文將為大家重點(diǎn)帶來實(shí)時(shí)入湖以及物化視圖的介紹。
CDC 實(shí)時(shí)入湖
Flink CDC 是基于數(shù)據(jù)庫日志的 CDC 技術(shù),實(shí)現(xiàn)了全增量一體化讀取的數(shù)據(jù)集成框架。配合 Flink 優(yōu)秀的管道能力和豐富的上下游生態(tài),F(xiàn)link CDC 可以高效實(shí)現(xiàn)海量數(shù)據(jù)的實(shí)時(shí)集成。不過 CDC 數(shù)據(jù)實(shí)時(shí)入湖也面臨著不小的挑戰(zhàn):
· 實(shí)時(shí)性高:CDC 數(shù)據(jù)對(duì)實(shí)時(shí)性要求高,數(shù)據(jù)新鮮度越高,往往業(yè)務(wù)價(jià)值越高
· 歷史數(shù)據(jù)量大:數(shù)據(jù)庫的歷史數(shù)據(jù)規(guī)模大
· 強(qiáng)一致性:數(shù)據(jù)處理必須要保證有序性而且結(jié)果需要一致性
· Schema 動(dòng)態(tài)演進(jìn):數(shù)據(jù)庫對(duì)應(yīng)的 Schema 會(huì)隨著業(yè)務(wù)不斷變更
那么,數(shù)棧是怎么做的呢?
袋鼠云自研的數(shù)據(jù)集成框架 ChunJun 支持 CDC 數(shù)據(jù)的采集,包括 MySQL CDC、Oracle CDC、PG CDC、SQLServer CDC。CDC 數(shù)據(jù)采集完之后,寫到 Iceberg/Hudi Sink 中,完成實(shí)時(shí)入湖的工作。
這樣下來的整條鏈路和架構(gòu)都是袋鼠云自主研發(fā)、完全可控的,并且實(shí)現(xiàn)了全增量一體化、分鐘級(jí)時(shí)延,對(duì)業(yè)務(wù)穩(wěn)定性也不會(huì)造成任何影響。
ChunJun:https://github.com/DTStack/chunjun.git
實(shí)時(shí)入湖落地中的問題
在實(shí)時(shí)入湖落地的過程中,我們當(dāng)然也遇到過問題和挑戰(zhàn):
· 小文件問題:小文件影響讀寫效率,導(dǎo)致 HDFS 集群穩(wěn)定性變差
· Hudi 適配 Flink1.12:客戶群體使用的 Flink 版本大多還停留在1.12
· 跨集群入湖:多套 Hadoop 集群的場(chǎng)景下存在跨集群的需求
數(shù)棧又是如何個(gè)個(gè)突破這些問題的呢?
● 小文件問題優(yōu)化
· 合理設(shè)置 Checkpoint Interval
整個(gè) Compaction 過程是一個(gè) I/O 比較多的操作過程,假設(shè)一味的調(diào)小 Checkpoint Interval,會(huì)產(chǎn)生諸如小文件問題、導(dǎo)致 HDFS 壓力變大、checkpoint 失敗、任務(wù)不穩(wěn)定等一系列問題。
在經(jīng)過多方實(shí)踐驗(yàn)證后,推薦將 Checkpoint Interval 設(shè)置為 1-5 分鐘為優(yōu)。
· 平臺(tái)化小文件治理
調(diào)整 Checkpoint,能夠緩解小文件的產(chǎn)生,之后還要進(jìn)行平臺(tái)化的小文件治理,從根本上解決問題。
EasyLake 湖表治理功能支持?jǐn)?shù)據(jù)文件治理,支持快照文件治理,支持 Hudi MOR 增量文件合并,將小文件數(shù)量控制在一定的范圍內(nèi),提升治理效率。
● Hudi 適配 Flink 1.12 版本做法
數(shù)棧在這方面并不是一張白紙,首先我們基于 hudi-flink1.13.x 模塊開發(fā) hudi-flink1.12,將 Flink 版本修改成1.12.7,再針對(duì)不兼容的點(diǎn)逐個(gè)進(jìn)行修復(fù),最后進(jìn)行完整的功能測(cè)試即完成了適配的工作。
· 跨集群入湖方案
Hudi 和 Iceberg Sink 默認(rèn)從 HADOOP_CONF_DIR 環(huán)境變量獲取 core-site.xml 和 hdfs-site.xml 訪問對(duì)應(yīng)的 HDFS。
數(shù)?;谧匝械?ChunJun,在 ChunJun iceberg-connector 和 hudi-connector 中對(duì) hadoop conf dir 的獲取方式進(jìn)行擴(kuò)展,支持通過指定 hadoopConfig 自定義參數(shù)的方式。
如此便能夠使集群之間的數(shù)據(jù)流動(dòng)起來,打破數(shù)據(jù)孤島,完成跨集群入湖的支持。
ETL 加速探索-物化視圖
在介紹數(shù)棧在物化視圖方面的探索之前,必須先理清楚我們?yōu)槭裁葱枰锘晥D?
在實(shí)時(shí)湖倉中包含三類任務(wù),實(shí)時(shí) ETL、離線 ETL 和 OLAP,以上三類任務(wù)在 ODS -> ADS 的加工過程中,都會(huì)出現(xiàn)聚合操作越來越多,IO 越來越密集,多個(gè)任務(wù) SQL 中具有相同邏輯的 SQL 片段等現(xiàn)象。
物化視圖可以將表連接或者聚合等耗時(shí)較多的結(jié)果進(jìn)行預(yù)計(jì)算并將計(jì)算結(jié)果保存下來,在對(duì)復(fù)雜 SQL 進(jìn)行查詢的時(shí)候,直接基于上一步預(yù)計(jì)算的結(jié)果進(jìn)行計(jì)算,從而避免耗時(shí)的操作,更快的得到結(jié)果。
而在實(shí)時(shí)湖倉中基于數(shù)據(jù)湖構(gòu)建的物化視圖可實(shí)現(xiàn)流、批和 OLAP 任務(wù)之間的共享,從而進(jìn)一步降低實(shí)時(shí)數(shù)據(jù)湖中數(shù)據(jù)在整條鏈路中的延時(shí)。為實(shí)時(shí)加工鏈路加速,并節(jié)省計(jì)算成本,提高查詢性能和響應(yīng)速度。
● 實(shí)時(shí)湖倉中落地物化視圖需要完成的內(nèi)容
· 平臺(tái)化數(shù)據(jù)湖物化視圖管理
· Spark 支持基于數(shù)據(jù)湖表格式管理物化視圖
· Trino 支持基于數(shù)據(jù)湖表格式管理物化視圖
· Flink 支持基于數(shù)據(jù)湖表格式管理物化視圖
目前數(shù)棧實(shí)時(shí)湖倉已經(jīng)完成了 Spark 和 Trino 的部分,之后也會(huì)將這四部分內(nèi)容都完成落地,充分發(fā)揮物化視圖的作用。
● 物化視圖實(shí)現(xiàn)原理
· 創(chuàng)建物化視圖語法
CREATE MATERIALIZED VIEW (IF NOT EXISTS)? multipartIdentifier
('(' colTypeList ')')? tableProvider?
((OPTIONS options=tablePropertyList) |
(PARTITIONED BY partitioning=partitionFieldList) |
skewSpec |
bucketSpec |
rowFormat |
createFileFormat |
locationSpec |
commentSpec |
(TBLPROPERTIES tableProps=tablePropertyList))*
AS query
· 示例
CREATE MATERIALIZED VIEW mv
AS SELECT
a.id,
a.name
FROM jinyu_base a
JOIN jinyu_base_partition b
ON a.id = b.id;
未來規(guī)劃
袋鼠云基于實(shí)時(shí)湖倉的實(shí)踐之路遠(yuǎn)不止于此,未來還將進(jìn)行更多、更深層次的探索,為企業(yè)提供更高效、更靈活、更智能的數(shù)據(jù)處理解決方案。
· 易用性:增加平臺(tái)湖表管理的易用性
· 引入 Paimon:平臺(tái)支持對(duì)接 Paimon、增加基于 Paimon 的湖倉一體建設(shè)
· 提升入湖性能:深入并增強(qiáng)內(nèi)核,提升入湖的的性能
· 安全性探索:實(shí)時(shí)湖倉提供數(shù)據(jù)共享、支持多引擎,探索實(shí)時(shí)湖倉的安全管理方案
本文根據(jù)《實(shí)時(shí)湖倉實(shí)踐五講第三期》直播內(nèi)容總結(jié)而來,感興趣的朋友們可點(diǎn)擊鏈接觀看直播回放視頻及免費(fèi)獲取直播課件。
直播課件:
https://www.dtstack.com/resources/1054?src=szsm
直播視頻:
https://www.bilibili.com/video/BV1Ee411d7Py/?spm_id_from=333.999.0.0&
《數(shù)棧產(chǎn)品白皮書》:https://www.dtstack.com/resources/1004?src=szsm
《數(shù)據(jù)治理行業(yè)實(shí)踐白皮書》下載地址:https://www.dtstack.com/resources/1001?src=szsm
想了解或咨詢更多有關(guān)袋鼠云大數(shù)據(jù)產(chǎn)品、行業(yè)解決方案、客戶案例的朋友,瀏覽袋鼠云官網(wǎng):https://www.dtstack.com/?src=szbky文章來源:http://www.zghlxwxcb.cn/news/detail-746032.html
同時(shí),歡迎對(duì)大數(shù)據(jù)開源項(xiàng)目有興趣的同學(xué)加入「袋鼠云開源框架釘釘技術(shù)qun」,交流最新開源技術(shù)信息,qun號(hào)碼:30537511,項(xiàng)目地址:https://github.com/DTStack文章來源地址http://www.zghlxwxcb.cn/news/detail-746032.html
到了這里,關(guān)于如何構(gòu)建新一代實(shí)時(shí)湖倉?袋鼠云基于數(shù)據(jù)湖的探索升級(jí)之路的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!