銀行湖倉一體實時數倉解決方案
數字化轉型驅動下,實時化需求日益成為金融業(yè)數據應用新常態(tài)。傳統離線數倉“T+N”數據供給模式,難于滿足“T+0”等高時效場景需求;依托Storm、spark Streaming、Flink等實時計算框架提供“端到端”的實時加工模式,無法沉淀實時數據資產,存在實時數據復用性低、煙囪式垂直建設等不足。
為此,可通過建設實時數倉解決上述問題,實時數倉在離線數倉基礎上進一步滿足時效性的要求,依托流批一體、湖倉一體、云計算等技術,兼具時效性和靈活性優(yōu)勢,可作為金融業(yè)實時數據的生產、存儲和使用平臺。
為解決傳統數倉數據時效性低等問題,實時數倉在技術路線上有多種路徑:
- 一種是基于Lambda架構的實時數倉,作為當前主流實時數倉架構,其在現有成熟離線加工鏈路上,增加實時計算鏈路,參照ODS、DWD、DWS等模型分層組織理念,實現與離線數倉的協同,通常采用kafka消息隊列、Flink計算引擎等組合實現,建設成本較低,但架構復雜,運維成本較高;
- 一種是基于Kappa架構的實時數倉,與Lambda架構相比,其移除了離線生產鏈路,完全依賴實時加工鏈路,其優(yōu)點是數據來源統一,架構相對簡化,節(jié)約開發(fā)及日常運維成本,但不易進行數據回溯計算,比較消耗內存計算資源;
- 此外,還有一類采用實時OLAP技術,將聚合分析計算由OLAP引擎承擔,減輕實時計算部分的聚合處理壓力,分析自由度高,減輕了計算引擎的處理壓力,但對引擎的吞吐、存儲和實時攝入、分析性能要求較高,此類實時數倉通常基于商業(yè)數據庫產品,如Hologres、GaussDB等。
同時,隨著Hudi、Iceberg、Delta Lake等數據湖技術發(fā)展,依托數據湖底座的湖倉一體實時數倉建設正在興起,對推進企業(yè)數字化轉型具有重要價值:
- 一是彌補現有架構的不足,湖倉一體實時數倉彌補了傳統數倉對于數據實時處理能力的不足,具備多引擎、多類型數據處理能力,流批一體加工類型豐富,避免了傳統數倉無法分析非結構化數據等問題。
- 二是降低企業(yè)成本,湖倉一體實時數倉提供統一流批數據底座,避免不同平臺間數據移動,降低數據流動帶來的開發(fā)成本及計算存儲開銷,提升企業(yè)效率。
- 三是提升企業(yè)級數據分析整合能力,湖倉一體實時數倉打破了數據湖與數據倉庫割裂的體系,將數據湖的靈活性、數據多樣性以及豐富的生態(tài)與數據倉庫的企業(yè)級數據分析能力進行了融合。
實時數倉建設思路
自農業(yè)銀行大數據平臺建設以來,經過多年的不斷發(fā)展,沉淀了豐富的離線數倉模型資產,具備PB級數據存儲和處理能力,支撐數百個應用場景。但總體來看,當前數據服務供給時效仍以T+N天為主,雖然依托實時流計算平臺支撐了實時存款大屏等高時效應用,但“端到端”的流加工模式難于實現實時數據資產沉淀和復用。
實時數倉基于數據湖技術能力,支持構建穩(wěn)定、全面、高擴展性的實時數據基礎層,建設和沉淀農行共性實時數據資產,滿足不同實時分析應用用數要求,提升數據模型加工時效性(見下圖),結合Flink、Hudi等數據湖存儲計算引擎,支持流數據、文件等數據入湖,利用Flink流批一體計算引擎層次化組織企業(yè)級實時資產,促進全行實時分析應用的統一。
相比前期的實時流計算平臺,它具有面向主題、有集成性、相對穩(wěn)定等的數據倉庫本身的特性,提供穩(wěn)定、持續(xù)的實時數據統一集成能力,支持共性、個性層次化實時數據模型的構建,滿足不同類型應用對流批數據加工模式的痛點需求。
為了提升實時數據資產的復用性,支持不同的應用,實時數倉采用數據分層理念組織實時數據資產。同時,考慮到層次增加會提高數據處理成本和時延,為縮短加工鏈路,實時數倉資產組織為ODS、DWD、DWS,外加DIM層。
lODS層
基于Hudi存儲原始數據,Binlog日志消息轉換成Upsert流式入湖,數據與生產源系統數據保持一致,保持原子粒度的數據。
lDWD層
和離線數倉中DWD層主題劃分一致,主要是為了解決一些原始數據中存在的噪聲、數據不完整和數據格式不一致的問題,形成規(guī)范、統一的數據源。DWD層包括數據解析、業(yè)務整合、臟數據的清洗和模型規(guī)范化。
lDIM層
DIM層是實時數倉中的維度數據,主要分為2類:變化頻率低的和變化頻率高的維度數據。對于變化頻率較低的維度數據,比如說機構信息等,可以通過離線維度數據同步到緩存或者通過公共維度服務進行查詢;對于變化頻率較高的維度數據,比如說匯率、價格等信息,則需要監(jiān)聽其變化情況,維護變動信息。
lDWS層
DWS層即匯總層,主要是對共性指標的統一加工,同時根據主題進行多維度的匯總等操作。特別地,對于時間區(qū)間的匯總,可以使用Flink中豐富的時間窗口實現。
實時數倉建設關鍵技術
實時數據入湖
實時數據入湖是湖倉一體實時數倉數據模型建設的基礎,與流計算模式下“即用即棄”的數據處理策略不同,湖倉一體實時數倉借助Hudi數據湖存儲引擎對實時流數據進行攝入存儲,以支持流讀、批讀等流批一體處理。為了支持實時數據Upsert語義,并提供ACID事務保證,實時入湖環(huán)節(jié)會帶來較高的處理開銷,因此為了保障大規(guī)模實時數據持續(xù)穩(wěn)定入湖集成,該環(huán)節(jié)對Hudi表類型、壓縮機制、Flink checkpoint間隔設置等有較高要求。
實時入湖表類型選取方面,根據讀寫特性的不同,Hudi表類型區(qū)分為MOR(Merge On Read)、COW(Copy On Write)模式。MOR方式通過不斷追加日志,在讀取時進行合并,適用于高吞吐寫入場景;COW方式是在寫入就進行合并操作,適合快速讀取場景。為保障農行高吞吐實時交易等數據入湖,對于個人活期交易明細等大表優(yōu)先選擇MOR方式。
入湖過程中持續(xù)的并發(fā)寫入,容易導致數據規(guī)模的膨脹和放大,需要周期性進行壓縮。同時,Hudi數據的可見性依賴于Flink計算引擎的CheckPoint間隔設置,在寫入操作和壓縮操作的雙重壓力下,為了避免壓縮操作與checkpoint的相互阻礙,可以采用離線壓縮模式,提升作業(yè)的穩(wěn)定性。
此外,針對各表不同的數據量,實時數倉會針對實時處理作業(yè)的運行CPU、內存進行調整,以滿足接入作業(yè)運行需求;為了保障后續(xù)的數據血緣追蹤,采用Hive MetaStore作為技術元數據的存儲。
流批數據模型加工
實時數據通過實時入湖集中接入數據湖后,將轉換成流批一體的數據格式,支持流批方式的讀取和加工,針對實時數據模型構建過程中的數據依賴特點,實時數倉在數據資產模型的加工能力支持上有不同的側重點。
情形一:數據模型完全依賴于增量數據:增量數據均可以實時入倉,并完成后續(xù)鏈路的實時流轉,得到分鐘級結果;
情形二:數據模型部分依賴于存量(無變化)數據:對于全量數據無變化的依賴數據,可以將存量數據進行加速(緩存至Redis/Hbase等),實現分鐘級模型生成,但對存量數據的管理要求很高。
情形三:數據模型部分依賴于全量(存量+增量)數據:對于全量數據緩慢變化的依賴數據,可以將存量數據進行加速(緩存至Redis/Hbase等),并實時維護數據變化,實現分鐘級模型生成,但對全量數據的管理要求很高。
情形四:數據模型完全依賴于全量(存量+增量)數據:分鐘級就緒,需要時觸發(fā)批量調度執(zhí)行,適用于批量模式;此外,結合農行數據模型的特點,實時數倉對明細類實時數據、主檔類實時數據的處理策略有所不同。
① 明細類實時數據 對于明細類交易數據,數據前后關聯度較低,可以采用流式寫入、流式讀取的方式進行增量處理。
② 主檔類實時數據 對于主檔類數據,數據需要考慮存量和增量的關系,而存量數據往往數據量比較大,無法直接進行關聯處理,可以采用流式更新、批量讀取的模式,及時準備好全量數據,實現模型的即時加工。
維度數據服務
為提升數據加工時效,實時數據模型對常用的基礎維度進行提前補齊,在滿足吞吐量等情況下,實現實時數據擴維,以空間換取時間,為數據分組匯總等提供基礎數據準備。例如:主檔類等具有存量數據的模型,可維護在Hbase、Redis等KV存儲引擎中,基于Ad hoc查找的方式實現數據的拼接處理,實現加工鏈路提速,不會由于主檔類數據的加入而導致全鏈路時效性降低。維度服務作為一種特殊的集成方式,提供全量上線、實時更新和批量增量更新模式。
維度加載
首次上線時,從大數據平臺主庫提取完備的全量數據,基于離線加載方式完成維度數據的全量鋪底,如基于Bulkload載入全量數據到Hbase。
維度更新
維度上線后,為了及時地反映維度信息的變化,維度服務同時會接入維度變化的實時流數據進行更新。
維度修正
為了減少離線、實時通道維度數據的偏差放大,維度服務將周期性進行維度數據同步更新修正,實現最新的維度數據和離線維度數據的一致性,避免后續(xù)計算口徑出現大的偏差。
寬表模型加工
寬表是按照“向主流標準靠攏”的方法對數據中臺基礎數據進行標準化組織整理形成的企業(yè)級數據模型表,作為農行新一代大數據模型規(guī)范,經過不斷迭代和發(fā)展,形成了理財、貸款等多種領域寬表。離線寬表模型核心是基于T+N的離線數據處理,因此具有強一致性、高吞吐性等特點,另一方面,為了保證更強的靈活性,離線寬表模型依賴關系錯綜復雜,流轉鏈路較長。
對于實時寬表而言,直接將離線寬表模型照搬到實時寬表模型成本代價高昂,加之加工環(huán)節(jié)的相互制約,時效性提升受限,不易實現成本和可行性價值的最大化。在實際業(yè)務場景中,很多場景其實并不要求全字段實時化,而是專注于拿到實時的事實數據,因此實時數倉在T-1離線寬表基礎上,通過擴增高時效字段等方式進一步滿足高時效場景。
實時數倉建設探索實踐
實時理財寬表探索
為探索寬表時效性提升路徑,實時數倉以理財寬表為試點,探索實時寬表建設思路。通過梳理整體加工鏈路,發(fā)現當前離線寬表模型具有如下顯著特點:
- 一是增量模式少,增全量模式多,其中交易拼接通用寬表增量與增全量加工比例為(3/25),理財產品歷史通用寬表(0/6),理財合約拼接通用寬表(0/43)。
- 二是模型層次多,加工鏈路普遍較長,層次普遍在3~7層。
- 三是模型之間依賴復雜,存在較多關聯,模型之間存在大量Join操作,個別模型單次存在11張表關聯。
因此,為了實現上述復雜鏈路的時效性提升,對于明細數據,實時數倉基于Upsert模式實現明細數據的維護,按時間分區(qū)分鐘級流式寫入,提供流式讀增量數據,支持了分鐘級數據鮮度。
對于主檔類數據,由于具有歷史數據,實時數倉采用Bulk Insert模式實現存量數據的鋪底入湖,通過Hudi全量數據接增量的方式,解決歷史數據首次加載,并平滑銜接增量數據的問題。同時,基于流式寫分鐘級更新數據狀態(tài)、批量讀取模式提供最新全量快照結果。
通過對明細、主檔類基礎數據的實時化處理,可以為寬表模型提供分鐘級數據,提升寬表產出時效,支撐重點鏈路分支分鐘級、整體T+0的數據供給時效。
實時標簽場景實踐
針對網金等實時標簽建設需求,實時數倉通過個人活期交易、掌銀新注冊客戶等明細模型建設,復用同一共性實時模型數據基礎上,拆分跨行交易、個人基金、代發(fā)工資3類主題數據,支持標簽中心不同類型實時標簽構建。此模式按照主題進行管理,進行統一的加工,比如清洗、過濾、擴維等,給下游提供直接可用的數據,避免了數據的重復加工,同時也實現了實時數據的存儲回溯,可滿足后續(xù)實時標簽等多場景建設。
在個人活期交易明細共性模型資產建設實踐中,為了滿足單表日均億級的高吞吐入湖集成,實時數倉從Hudi表類型、數據分區(qū)、Hudi壓縮等措施優(yōu)化配置,實現高吞吐實時流數據場景下的穩(wěn)定入湖:
1)Hudi表選型方面,通過長周期疲勞測試發(fā)現,此場景下基于COW類型作業(yè)會出現較大反壓、延遲逐漸放大等情形,為了避免延遲情況,實時數倉基于MOR表的模式,滿足高吞吐實時數據的快速入湖;
2)數據分區(qū)方面,實時數倉對明細數據模型進行日期分區(qū),考慮到明細類數據插入多、更新少等特點,為了減輕Hudi的Index索引壓力,進一步降低索引存效時間;
3)壓縮方面,實時數倉考慮到在線壓縮對入湖任務造成的不穩(wěn)定性,采用了離線壓縮,通過腳本控制壓縮計劃的執(zhí)行,確保不會出現積壓的問題。
基于沉淀的共性模型資產,實時數倉先后支撐大額動賬實時線索、掌銀新客實時標簽、代發(fā)工資實時標簽等多個場景建設。
未來展望
湖倉一體實時數倉將數據湖的靈活性、數據多樣性、豐富生態(tài)與數據倉庫的企業(yè)級數據分析能力進行了融合,對實時數據模型建設具有重要價值。未來,隨著農行數據湖建設,實時數倉將融合數據湖基礎底座建設,構建穩(wěn)定、全面、高擴展性的實時數據基礎層,建設和沉淀農行共性實時數據資產,滿足不同實時分析應用用數要求。實時數倉基于流批一體數據集成,提升數據加工時效性,促進全行實時分析型應用架構的統一,對實時場景建設支撐等具有重要意義。
持續(xù)穩(wěn)定的實時數據供給
實時數倉基于湖的平臺化實時集成能力,可以實現對豐富的實時流數據集成,降低各類實時應用實時數據集成建設成本;同時依托數據湖流批一體存儲特性,以實現時間旅行等一些新特性,滿足可靠性要求等場景,比如某個時間端實時數據的重放處理等等。
豐富的實時數據模型資產
實時數倉統籌供給共性的實時數據模型資產,避免了各實時應用端到端的重復加工。比如基于明細層模型,運營可以獲取到機構級的匯總結果,營銷可以匯總到產品級的結果等等,而各自無需對明細處理,實現實時數據的一口出。
開放的多租戶能力建設
數據湖倉租戶依托數據湖統一存算底座,低成本拎包入住,實現資源申配、實時數據授權、資產發(fā)現,利用實時數倉持續(xù)實時數據、共性模型供給,并結合數據湖一站式DataOps標準化工藝,無需數據出湖,提升數據加工時效,滿足實時應用場景快速落地,實現數據湖價值最大化。