基于Doris ,打造快速、安全、高可靠的實時數(shù)據(jù)倉庫
在當今數(shù)據(jù)驅(qū)動的時代,構(gòu)建一個快速、安全和高可靠的實時數(shù)據(jù)倉庫對于企業(yè)來說至關(guān)重要。Apache Doris作為一個強大的開源數(shù)據(jù)倉庫解決方案,提供了實現(xiàn)這一目標的理想選擇。通過利用Doris的強大功能和特性,可以構(gòu)建一個高度可擴展且具備優(yōu)異性能的實時數(shù)據(jù)倉庫,以滿足數(shù)據(jù)處理和分析的需求。本文介紹如何基于Doris打造這樣一個數(shù)據(jù)倉庫,以實現(xiàn)數(shù)據(jù)驅(qū)動。
1 使用Apache Doris構(gòu)建實時數(shù)據(jù)倉庫
1.1 數(shù)據(jù)模型選擇
Apache Doris使用三種數(shù)據(jù)模型來組織數(shù)據(jù),這些模型之間的主要區(qū)別在于是否以及如何聚合數(shù)據(jù)。
- Duplicate Key模型:用于詳細數(shù)據(jù)查詢。支持任意維度的即席查詢。
- Unique Key模型:用于存在數(shù)據(jù)唯一性約束的用例。支持精確去重、多流Upsert和部分列更新。
- Aggregate Key模型:用于數(shù)據(jù)報表。通過預聚合數(shù)據(jù),加速數(shù)據(jù)報表生成。
金融用戶在不同的數(shù)據(jù)倉庫層中采用不同的數(shù)據(jù)模型:
- ODS(原始數(shù)據(jù)層)- Duplicate Key模型:作為支付服務(wù)提供商,用戶每天收到一百萬筆結(jié)算數(shù)據(jù)。由于結(jié)算周期可能跨越一整年,相關(guān)數(shù)據(jù)需要保存一年。因此,合適的方式是將其放入Duplicate Key模型,該模型不執(zhí)行任何數(shù)據(jù)聚合。唯一的例外是一些容易變動的數(shù)據(jù),比如來自零售商的訂單狀態(tài)。這些數(shù)據(jù)應(yīng)該放入Unique Key模型,以便同一零售商ID或訂單ID的新記錄始終替換舊記錄。
- DWD(數(shù)據(jù)倉庫層)和DWS(數(shù)據(jù)服務(wù)層)- Unique Key模型:DWD和DWS層的數(shù)據(jù)進一步抽象,但仍然放在Unique Key模型中,以便結(jié)算數(shù)據(jù)可以自動更新。
- ADS(分析數(shù)據(jù)層)- Aggregate Key模型:該層中的數(shù)據(jù)高度抽象。通過預聚合數(shù)據(jù),減輕下游分析的計算負載。
1.2 分區(qū)和桶化策略
分區(qū)和桶化的思想是將數(shù)據(jù)“切割”成較小的部分,以增加數(shù)據(jù)處理速度。關(guān)鍵是設(shè)置適當數(shù)量的數(shù)據(jù)分區(qū)和桶。根據(jù)使用情況,根據(jù)每個表自定義桶化字段和桶的數(shù)量。例如,經(jīng)常需要從零售商扁平表查詢不同零售商的維度數(shù)據(jù),因此可以將零售商ID列指定為桶化字段,并列出各種數(shù)據(jù)大小的推薦桶數(shù)量。
圖片
2 多源數(shù)據(jù)遷移
在采用Apache Doris時,需要將所有分支機構(gòu)的本地數(shù)據(jù)遷移到Doris中,但會發(fā)現(xiàn)分支機構(gòu)使用了不同的數(shù)據(jù)庫,并且具有非常不同的數(shù)據(jù)文件格式,所以遷移可能會很混亂。
圖片
幸運的是,Apache Doris支持豐富的數(shù)據(jù)集成方法,既支持實時數(shù)據(jù)流式處理,又支持離線數(shù)據(jù)導入。
- 實時數(shù)據(jù)流處理:Apache Doris實時獲取MySQL Binlog。其中一部分通過Flink CDC直接寫入Doris,而高容量的數(shù)據(jù)則通過Kafka同步,然后通過Flink-Doris-Connector寫入Doris。
- 離線數(shù)據(jù)導入:包括更多種類的數(shù)據(jù)源和數(shù)據(jù)格式。歷史數(shù)據(jù)和增量數(shù)據(jù)從S3和HDFS導入Doris使用經(jīng)紀人加載方法,來自Hive或JDBC的數(shù)據(jù)通過Insert Into方法同步到Doris,文件通過Flink-Doris-Connector和Flink FTP Connector加載到Doris。(FTP是用戶在系統(tǒng)之間傳輸文件的方式,所以他們開發(fā)了Flink-FTP-Connector以支持復雜的數(shù)據(jù)格式和多個換行符的數(shù)據(jù)。)
3 全量數(shù)據(jù)攝取和增量數(shù)據(jù)攝取
為了確保業(yè)務(wù)連續(xù)性和數(shù)據(jù)準確性,可用以下攝取全量數(shù)據(jù)和增量數(shù)據(jù)的方法:
- 全量數(shù)據(jù)攝?。涸贒oris中創(chuàng)建目標模式的臨時表,將全量數(shù)據(jù)導入臨時表,然后使用
ALTER TABLE t1 REPLACE WITH TABLE t2
語句原子替換常規(guī)表為臨時表。這種方法可以避免對前面的查詢產(chǎn)生影響。
alter table ${DB_NAME}.${TBL_NAME} drop partition IF EXISTS p${P_DOWN_DATE};
ALTER TABLE ${DB_NAME}.${TBL_NAME} ADD PARTITION IF NOT EXISTS p${P_DOWN_DATE} VALUES[('${P_DOWN_DATE}'), ('${P_UP_DATE}'));
LOAD LABEL ${TBL_NAME}_${load_timestamp} ...
- 增量數(shù)據(jù)導入:創(chuàng)建新的數(shù)據(jù)分區(qū)以容納增量數(shù)據(jù)。
4 離線數(shù)據(jù)處理
已經(jīng)將部分離線數(shù)據(jù)處理工作遷移到Apache Doris,并把執(zhí)行速度提高了5倍。
圖片
- 之前:舊的基于Hive的離線數(shù)據(jù)倉庫使用TEZ執(zhí)行引擎每天處理3000萬條新數(shù)據(jù)記錄。使用2TB計算資源,整個流程需要2.5小時。
- 現(xiàn)在:Apache Doris在僅30分鐘內(nèi)完成相同的任務(wù),僅消耗1TB。腳本執(zhí)行僅需要10秒,而不是8分鐘。
5 面向金融機構(gòu)的企業(yè)功能
多租戶資源隔離
這是必需的,因為經(jīng)常會發(fā)生多個團隊或業(yè)務(wù)系統(tǒng)請求同一數(shù)據(jù)的情況。這些任務(wù)可能導致資源搶占,從而降低性能和系統(tǒng)的穩(wěn)定性。
5.1 不同工作負載的資源限制
這里把分析工作負載分為四類,并為每個類別設(shè)置了資源限制。特別是擁有四種不同類型的Doris賬戶,并為每種類型的賬戶設(shè)置了CPU和內(nèi)存資源的限制。
圖片
通過這種方式,當一個租戶需要過多的資源時,它只會影響自己的效率,而不會影響其他租戶。
5.2 基于資源標簽的隔離
為了滿足母子公司層級的數(shù)據(jù)安全性,這里為子公司設(shè)置隔離的資源組。每個子公司的數(shù)據(jù)存儲在其自己的資源組中,并具有三個副本,而母公司的數(shù)據(jù)則存儲在四個副本中:三個在母公司資源組中,另一個在子公司資源組中。因此,當子公司的員工請求母公司的數(shù)據(jù)時,查詢只會在子公司資源組中執(zhí)行。具體而言,采取以下步驟:
圖片
5.3 工作負載組
基于資源標簽的隔離方案確保了物理級別的隔離,但作為Apache Doris開發(fā)人員,希望進一步優(yōu)化資源利用率并追求更細粒度的資源隔離。為此,在Apache Doris 2.0中推出了工作負載組功能。
工作負載組機制將查詢與工作負載組相關(guān)聯(lián),限制了查詢可以使用的后端節(jié)點的CPU和內(nèi)存資源的共享。當集群資源短缺時,最大的查詢將停止執(zhí)行。相反,當集群資源充足且工作負載組需要的資源超過限制時,它將按比例分配空閑資源。
5.4 細粒度用戶權(quán)限管理
出于規(guī)章制度和合規(guī)性原因,有的提供商實施嚴格的權(quán)限控制,以確保每個人只能訪問他們應(yīng)該訪問的內(nèi)容。參考做法如下:
- 用戶權(quán)限設(shè)置:不同子公司或具有不同業(yè)務(wù)需求的系統(tǒng)用戶被分配不同的數(shù)據(jù)訪問權(quán)限。
- 對數(shù)據(jù)庫、表和行的權(quán)限控制:Apache Doris的ROW POLICY機制使這些操作變得容易。
- 對列的權(quán)限控制:通過創(chuàng)建視圖來實現(xiàn)。
圖片
6 集群穩(wěn)定性保證
- 斷路器機制:偶爾,系統(tǒng)用戶可能輸入有誤的SQL,導致資源消耗過多。為此,設(shè)置了斷路器機制。它將及時停止這些消耗資源的查詢,防止對系統(tǒng)的干擾。
- 數(shù)據(jù)攝取并發(fā)控制:例如經(jīng)常需要將歷史數(shù)據(jù)整合到數(shù)據(jù)平臺中。這涉及大量的數(shù)據(jù)修改任務(wù),可能會對集群造成壓力。為解決這個問題,可在唯一鍵模型中啟用寫入合并模式,啟用垂直壓縮和段壓縮,并調(diào)整數(shù)據(jù)壓縮參數(shù)以控制數(shù)據(jù)攝取并發(fā)性。
- 網(wǎng)絡(luò)流量控制:若有在不同城市的兩個集群,可采用針對不同場景的服務(wù)質(zhì)量(QoS)策略,以實現(xiàn)精確的網(wǎng)絡(luò)隔離,確保網(wǎng)絡(luò)質(zhì)量和穩(wěn)定性。
- 監(jiān)控和警報:將Doris與內(nèi)部監(jiān)控和警報平臺集成,任何檢測到的問題都將通過消息軟件和電子郵件及時通知。