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