銀行湖倉一體實時數(shù)倉解決方案

數(shù)字化轉型驅動下,實時化需求日益成為金融業(yè)數(shù)據(jù)應用新常態(tài)。傳統(tǒng)離線數(shù)倉“T+N”數(shù)據(jù)供給模式,難于滿足“T+0”等高時效場景需求;依托Storm、spark Streaming、Flink等實時計算框架提供“端到端”的實時加工模式,無法沉淀實時數(shù)據(jù)資產,存在實時數(shù)據(jù)復用性低、煙囪式垂直建設等不足。
為此,可通過建設實時數(shù)倉解決上述問題,實時數(shù)倉在離線數(shù)倉基礎上進一步滿足時效性的要求,依托流批一體、湖倉一體、云計算等技術,兼具時效性和靈活性優(yōu)勢,可作為金融業(yè)實時數(shù)據(jù)的生產、存儲和使用平臺。
為解決傳統(tǒng)數(shù)倉數(shù)據(jù)時效性低等問題,實時數(shù)倉在技術路線上有多種路徑:
- 一種是基于Lambda架構的實時數(shù)倉,作為當前主流實時數(shù)倉架構,其在現(xiàn)有成熟離線加工鏈路上,增加實時計算鏈路,參照ODS、DWD、DWS等模型分層組織理念,實現(xiàn)與離線數(shù)倉的協(xié)同,通常采用kafka消息隊列、Flink計算引擎等組合實現(xiàn),建設成本較低,但架構復雜,運維成本較高;
- 一種是基于Kappa架構的實時數(shù)倉,與Lambda架構相比,其移除了離線生產鏈路,完全依賴實時加工鏈路,其優(yōu)點是數(shù)據(jù)來源統(tǒng)一,架構相對簡化,節(jié)約開發(fā)及日常運維成本,但不易進行數(shù)據(jù)回溯計算,比較消耗內存計算資源;
- 此外,還有一類采用實時OLAP技術,將聚合分析計算由OLAP引擎承擔,減輕實時計算部分的聚合處理壓力,分析自由度高,減輕了計算引擎的處理壓力,但對引擎的吞吐、存儲和實時攝入、分析性能要求較高,此類實時數(shù)倉通常基于商業(yè)數(shù)據(jù)庫產品,如Hologres、GaussDB等。
同時,隨著Hudi、Iceberg、Delta Lake等數(shù)據(jù)湖技術發(fā)展,依托數(shù)據(jù)湖底座的湖倉一體實時數(shù)倉建設正在興起,對推進企業(yè)數(shù)字化轉型具有重要價值:
- 一是彌補現(xiàn)有架構的不足,湖倉一體實時數(shù)倉彌補了傳統(tǒng)數(shù)倉對于數(shù)據(jù)實時處理能力的不足,具備多引擎、多類型數(shù)據(jù)處理能力,流批一體加工類型豐富,避免了傳統(tǒng)數(shù)倉無法分析非結構化數(shù)據(jù)等問題。
- 二是降低企業(yè)成本,湖倉一體實時數(shù)倉提供統(tǒng)一流批數(shù)據(jù)底座,避免不同平臺間數(shù)據(jù)移動,降低數(shù)據(jù)流動帶來的開發(fā)成本及計算存儲開銷,提升企業(yè)效率。
- 三是提升企業(yè)級數(shù)據(jù)分析整合能力,湖倉一體實時數(shù)倉打破了數(shù)據(jù)湖與數(shù)據(jù)倉庫割裂的體系,將數(shù)據(jù)湖的靈活性、數(shù)據(jù)多樣性以及豐富的生態(tài)與數(shù)據(jù)倉庫的企業(yè)級數(shù)據(jù)分析能力進行了融合。
實時數(shù)倉建設思路
自農業(yè)銀行大數(shù)據(jù)平臺建設以來,經(jīng)過多年的不斷發(fā)展,沉淀了豐富的離線數(shù)倉模型資產,具備PB級數(shù)據(jù)存儲和處理能力,支撐數(shù)百個應用場景。但總體來看,當前數(shù)據(jù)服務供給時效仍以T+N天為主,雖然依托實時流計算平臺支撐了實時存款大屏等高時效應用,但“端到端”的流加工模式難于實現(xiàn)實時數(shù)據(jù)資產沉淀和復用。
實時數(shù)倉基于數(shù)據(jù)湖技術能力,支持構建穩(wěn)定、全面、高擴展性的實時數(shù)據(jù)基礎層,建設和沉淀農行共性實時數(shù)據(jù)資產,滿足不同實時分析應用用數(shù)要求,提升數(shù)據(jù)模型加工時效性(見下圖),結合Flink、Hudi等數(shù)據(jù)湖存儲計算引擎,支持流數(shù)據(jù)、文件等數(shù)據(jù)入湖,利用Flink流批一體計算引擎層次化組織企業(yè)級實時資產,促進全行實時分析應用的統(tǒng)一。

相比前期的實時流計算平臺,它具有面向主題、有集成性、相對穩(wěn)定等的數(shù)據(jù)倉庫本身的特性,提供穩(wěn)定、持續(xù)的實時數(shù)據(jù)統(tǒng)一集成能力,支持共性、個性層次化實時數(shù)據(jù)模型的構建,滿足不同類型應用對流批數(shù)據(jù)加工模式的痛點需求。

為了提升實時數(shù)據(jù)資產的復用性,支持不同的應用,實時數(shù)倉采用數(shù)據(jù)分層理念組織實時數(shù)據(jù)資產。同時,考慮到層次增加會提高數(shù)據(jù)處理成本和時延,為縮短加工鏈路,實時數(shù)倉資產組織為ODS、DWD、DWS,外加DIM層。

lODS層
基于Hudi存儲原始數(shù)據(jù),Binlog日志消息轉換成Upsert流式入湖,數(shù)據(jù)與生產源系統(tǒng)數(shù)據(jù)保持一致,保持原子粒度的數(shù)據(jù)。
lDWD層
和離線數(shù)倉中DWD層主題劃分一致,主要是為了解決一些原始數(shù)據(jù)中存在的噪聲、數(shù)據(jù)不完整和數(shù)據(jù)格式不一致的問題,形成規(guī)范、統(tǒng)一的數(shù)據(jù)源。DWD層包括數(shù)據(jù)解析、業(yè)務整合、臟數(shù)據(jù)的清洗和模型規(guī)范化。
lDIM層
DIM層是實時數(shù)倉中的維度數(shù)據(jù),主要分為2類:變化頻率低的和變化頻率高的維度數(shù)據(jù)。對于變化頻率較低的維度數(shù)據(jù),比如說機構信息等,可以通過離線維度數(shù)據(jù)同步到緩存或者通過公共維度服務進行查詢;對于變化頻率較高的維度數(shù)據(jù),比如說匯率、價格等信息,則需要監(jiān)聽其變化情況,維護變動信息。
lDWS層
DWS層即匯總層,主要是對共性指標的統(tǒng)一加工,同時根據(jù)主題進行多維度的匯總等操作。特別地,對于時間區(qū)間的匯總,可以使用Flink中豐富的時間窗口實現(xiàn)。
實時數(shù)倉建設關鍵技術
實時數(shù)據(jù)入湖
實時數(shù)據(jù)入湖是湖倉一體實時數(shù)倉數(shù)據(jù)模型建設的基礎,與流計算模式下“即用即棄”的數(shù)據(jù)處理策略不同,湖倉一體實時數(shù)倉借助Hudi數(shù)據(jù)湖存儲引擎對實時流數(shù)據(jù)進行攝入存儲,以支持流讀、批讀等流批一體處理。為了支持實時數(shù)據(jù)Upsert語義,并提供ACID事務保證,實時入湖環(huán)節(jié)會帶來較高的處理開銷,因此為了保障大規(guī)模實時數(shù)據(jù)持續(xù)穩(wěn)定入湖集成,該環(huán)節(jié)對Hudi表類型、壓縮機制、Flink checkpoint間隔設置等有較高要求。

實時入湖表類型選取方面,根據(jù)讀寫特性的不同,Hudi表類型區(qū)分為MOR(Merge On Read)、COW(Copy On Write)模式。MOR方式通過不斷追加日志,在讀取時進行合并,適用于高吞吐寫入場景;COW方式是在寫入就進行合并操作,適合快速讀取場景。為保障農行高吞吐實時交易等數(shù)據(jù)入湖,對于個人活期交易明細等大表優(yōu)先選擇MOR方式。
入湖過程中持續(xù)的并發(fā)寫入,容易導致數(shù)據(jù)規(guī)模的膨脹和放大,需要周期性進行壓縮。同時,Hudi數(shù)據(jù)的可見性依賴于Flink計算引擎的CheckPoint間隔設置,在寫入操作和壓縮操作的雙重壓力下,為了避免壓縮操作與checkpoint的相互阻礙,可以采用離線壓縮模式,提升作業(yè)的穩(wěn)定性。
此外,針對各表不同的數(shù)據(jù)量,實時數(shù)倉會針對實時處理作業(yè)的運行CPU、內存進行調整,以滿足接入作業(yè)運行需求;為了保障后續(xù)的數(shù)據(jù)血緣追蹤,采用Hive MetaStore作為技術元數(shù)據(jù)的存儲。
流批數(shù)據(jù)模型加工
實時數(shù)據(jù)通過實時入湖集中接入數(shù)據(jù)湖后,將轉換成流批一體的數(shù)據(jù)格式,支持流批方式的讀取和加工,針對實時數(shù)據(jù)模型構建過程中的數(shù)據(jù)依賴特點,實時數(shù)倉在數(shù)據(jù)資產模型的加工能力支持上有不同的側重點。

情形一:數(shù)據(jù)模型完全依賴于增量數(shù)據(jù):增量數(shù)據(jù)均可以實時入倉,并完成后續(xù)鏈路的實時流轉,得到分鐘級結果;
情形二:數(shù)據(jù)模型部分依賴于存量(無變化)數(shù)據(jù):對于全量數(shù)據(jù)無變化的依賴數(shù)據(jù),可以將存量數(shù)據(jù)進行加速(緩存至Redis/Hbase等),實現(xiàn)分鐘級模型生成,但對存量數(shù)據(jù)的管理要求很高。
情形三:數(shù)據(jù)模型部分依賴于全量(存量+增量)數(shù)據(jù):對于全量數(shù)據(jù)緩慢變化的依賴數(shù)據(jù),可以將存量數(shù)據(jù)進行加速(緩存至Redis/Hbase等),并實時維護數(shù)據(jù)變化,實現(xiàn)分鐘級模型生成,但對全量數(shù)據(jù)的管理要求很高。
情形四:數(shù)據(jù)模型完全依賴于全量(存量+增量)數(shù)據(jù):分鐘級就緒,需要時觸發(fā)批量調度執(zhí)行,適用于批量模式;此外,結合農行數(shù)據(jù)模型的特點,實時數(shù)倉對明細類實時數(shù)據(jù)、主檔類實時數(shù)據(jù)的處理策略有所不同。
① 明細類實時數(shù)據(jù) 對于明細類交易數(shù)據(jù),數(shù)據(jù)前后關聯(lián)度較低,可以采用流式寫入、流式讀取的方式進行增量處理。

② 主檔類實時數(shù)據(jù) 對于主檔類數(shù)據(jù),數(shù)據(jù)需要考慮存量和增量的關系,而存量數(shù)據(jù)往往數(shù)據(jù)量比較大,無法直接進行關聯(lián)處理,可以采用流式更新、批量讀取的模式,及時準備好全量數(shù)據(jù),實現(xiàn)模型的即時加工。

維度數(shù)據(jù)服務
為提升數(shù)據(jù)加工時效,實時數(shù)據(jù)模型對常用的基礎維度進行提前補齊,在滿足吞吐量等情況下,實現(xiàn)實時數(shù)據(jù)擴維,以空間換取時間,為數(shù)據(jù)分組匯總等提供基礎數(shù)據(jù)準備。例如:主檔類等具有存量數(shù)據(jù)的模型,可維護在Hbase、Redis等KV存儲引擎中,基于Ad hoc查找的方式實現(xiàn)數(shù)據(jù)的拼接處理,實現(xiàn)加工鏈路提速,不會由于主檔類數(shù)據(jù)的加入而導致全鏈路時效性降低。維度服務作為一種特殊的集成方式,提供全量上線、實時更新和批量增量更新模式。

維度加載
首次上線時,從大數(shù)據(jù)平臺主庫提取完備的全量數(shù)據(jù),基于離線加載方式完成維度數(shù)據(jù)的全量鋪底,如基于Bulkload載入全量數(shù)據(jù)到Hbase。
維度更新
維度上線后,為了及時地反映維度信息的變化,維度服務同時會接入維度變化的實時流數(shù)據(jù)進行更新。
維度修正
為了減少離線、實時通道維度數(shù)據(jù)的偏差放大,維度服務將周期性進行維度數(shù)據(jù)同步更新修正,實現(xiàn)最新的維度數(shù)據(jù)和離線維度數(shù)據(jù)的一致性,避免后續(xù)計算口徑出現(xiàn)大的偏差。
寬表模型加工
寬表是按照“向主流標準靠攏”的方法對數(shù)據(jù)中臺基礎數(shù)據(jù)進行標準化組織整理形成的企業(yè)級數(shù)據(jù)模型表,作為農行新一代大數(shù)據(jù)模型規(guī)范,經(jīng)過不斷迭代和發(fā)展,形成了理財、貸款等多種領域寬表。離線寬表模型核心是基于T+N的離線數(shù)據(jù)處理,因此具有強一致性、高吞吐性等特點,另一方面,為了保證更強的靈活性,離線寬表模型依賴關系錯綜復雜,流轉鏈路較長。
對于實時寬表而言,直接將離線寬表模型照搬到實時寬表模型成本代價高昂,加之加工環(huán)節(jié)的相互制約,時效性提升受限,不易實現(xiàn)成本和可行性價值的最大化。在實際業(yè)務場景中,很多場景其實并不要求全字段實時化,而是專注于拿到實時的事實數(shù)據(jù),因此實時數(shù)倉在T-1離線寬表基礎上,通過擴增高時效字段等方式進一步滿足高時效場景。
實時數(shù)倉建設探索實踐
實時理財寬表探索
為探索寬表時效性提升路徑,實時數(shù)倉以理財寬表為試點,探索實時寬表建設思路。通過梳理整體加工鏈路,發(fā)現(xiàn)當前離線寬表模型具有如下顯著特點:
- 一是增量模式少,增全量模式多,其中交易拼接通用寬表增量與增全量加工比例為(3/25),理財產品歷史通用寬表(0/6),理財合約拼接通用寬表(0/43)。
- 二是模型層次多,加工鏈路普遍較長,層次普遍在3~7層。
- 三是模型之間依賴復雜,存在較多關聯(lián),模型之間存在大量Join操作,個別模型單次存在11張表關聯(lián)。
因此,為了實現(xiàn)上述復雜鏈路的時效性提升,對于明細數(shù)據(jù),實時數(shù)倉基于Upsert模式實現(xiàn)明細數(shù)據(jù)的維護,按時間分區(qū)分鐘級流式寫入,提供流式讀增量數(shù)據(jù),支持了分鐘級數(shù)據(jù)鮮度。
對于主檔類數(shù)據(jù),由于具有歷史數(shù)據(jù),實時數(shù)倉采用Bulk Insert模式實現(xiàn)存量數(shù)據(jù)的鋪底入湖,通過Hudi全量數(shù)據(jù)接增量的方式,解決歷史數(shù)據(jù)首次加載,并平滑銜接增量數(shù)據(jù)的問題。同時,基于流式寫分鐘級更新數(shù)據(jù)狀態(tài)、批量讀取模式提供最新全量快照結果。

通過對明細、主檔類基礎數(shù)據(jù)的實時化處理,可以為寬表模型提供分鐘級數(shù)據(jù),提升寬表產出時效,支撐重點鏈路分支分鐘級、整體T+0的數(shù)據(jù)供給時效。
實時標簽場景實踐
針對網(wǎng)金等實時標簽建設需求,實時數(shù)倉通過個人活期交易、掌銀新注冊客戶等明細模型建設,復用同一共性實時模型數(shù)據(jù)基礎上,拆分跨行交易、個人基金、代發(fā)工資3類主題數(shù)據(jù),支持標簽中心不同類型實時標簽構建。此模式按照主題進行管理,進行統(tǒng)一的加工,比如清洗、過濾、擴維等,給下游提供直接可用的數(shù)據(jù),避免了數(shù)據(jù)的重復加工,同時也實現(xiàn)了實時數(shù)據(jù)的存儲回溯,可滿足后續(xù)實時標簽等多場景建設。

在個人活期交易明細共性模型資產建設實踐中,為了滿足單表日均億級的高吞吐入湖集成,實時數(shù)倉從Hudi表類型、數(shù)據(jù)分區(qū)、Hudi壓縮等措施優(yōu)化配置,實現(xiàn)高吞吐實時流數(shù)據(jù)場景下的穩(wěn)定入湖:
1)Hudi表選型方面,通過長周期疲勞測試發(fā)現(xiàn),此場景下基于COW類型作業(yè)會出現(xiàn)較大反壓、延遲逐漸放大等情形,為了避免延遲情況,實時數(shù)倉基于MOR表的模式,滿足高吞吐實時數(shù)據(jù)的快速入湖;
2)數(shù)據(jù)分區(qū)方面,實時數(shù)倉對明細數(shù)據(jù)模型進行日期分區(qū),考慮到明細類數(shù)據(jù)插入多、更新少等特點,為了減輕Hudi的Index索引壓力,進一步降低索引存效時間;
3)壓縮方面,實時數(shù)倉考慮到在線壓縮對入湖任務造成的不穩(wěn)定性,采用了離線壓縮,通過腳本控制壓縮計劃的執(zhí)行,確保不會出現(xiàn)積壓的問題。
基于沉淀的共性模型資產,實時數(shù)倉先后支撐大額動賬實時線索、掌銀新客實時標簽、代發(fā)工資實時標簽等多個場景建設。
未來展望
湖倉一體實時數(shù)倉將數(shù)據(jù)湖的靈活性、數(shù)據(jù)多樣性、豐富生態(tài)與數(shù)據(jù)倉庫的企業(yè)級數(shù)據(jù)分析能力進行了融合,對實時數(shù)據(jù)模型建設具有重要價值。未來,隨著農行數(shù)據(jù)湖建設,實時數(shù)倉將融合數(shù)據(jù)湖基礎底座建設,構建穩(wěn)定、全面、高擴展性的實時數(shù)據(jù)基礎層,建設和沉淀農行共性實時數(shù)據(jù)資產,滿足不同實時分析應用用數(shù)要求。實時數(shù)倉基于流批一體數(shù)據(jù)集成,提升數(shù)據(jù)加工時效性,促進全行實時分析型應用架構的統(tǒng)一,對實時場景建設支撐等具有重要意義。
持續(xù)穩(wěn)定的實時數(shù)據(jù)供給
實時數(shù)倉基于湖的平臺化實時集成能力,可以實現(xiàn)對豐富的實時流數(shù)據(jù)集成,降低各類實時應用實時數(shù)據(jù)集成建設成本;同時依托數(shù)據(jù)湖流批一體存儲特性,以實現(xiàn)時間旅行等一些新特性,滿足可靠性要求等場景,比如某個時間端實時數(shù)據(jù)的重放處理等等。
豐富的實時數(shù)據(jù)模型資產
實時數(shù)倉統(tǒng)籌供給共性的實時數(shù)據(jù)模型資產,避免了各實時應用端到端的重復加工。比如基于明細層模型,運營可以獲取到機構級的匯總結果,營銷可以匯總到產品級的結果等等,而各自無需對明細處理,實現(xiàn)實時數(shù)據(jù)的一口出。
開放的多租戶能力建設
數(shù)據(jù)湖倉租戶依托數(shù)據(jù)湖統(tǒng)一存算底座,低成本拎包入住,實現(xiàn)資源申配、實時數(shù)據(jù)授權、資產發(fā)現(xiàn),利用實時數(shù)倉持續(xù)實時數(shù)據(jù)、共性模型供給,并結合數(shù)據(jù)湖一站式DataOps標準化工藝,無需數(shù)據(jù)出湖,提升數(shù)據(jù)加工時效,滿足實時應用場景快速落地,實現(xiàn)數(shù)據(jù)湖價值最大化。


































