曹云柯
(上海久譽(yù)軟件系統(tǒng)有限公司 上海市 200233)
隨著分布式技術(shù)研究的不斷深入和該技術(shù)應(yīng)用范圍的進(jìn)一步拓寬,智能工業(yè)、信息技術(shù)、生物科技等不同產(chǎn)業(yè)對(duì)分布式計(jì)算方式的應(yīng)用程度進(jìn)一步加深,數(shù)據(jù)信息處理也從以往的單一的離線處理模式轉(zhuǎn)變?yōu)槎嘟嵌鹊膶?shí)時(shí)在線處理方式,數(shù)據(jù)信息處理量進(jìn)一步加大。因此,實(shí)時(shí)數(shù)據(jù)信息處理能力也就逐步衍變?yōu)槠髽I(yè)或者其他主體市場(chǎng)競(jìng)爭(zhēng)能力的一種。但在傳統(tǒng)模式下的實(shí)時(shí)數(shù)據(jù)信息處理過程中,實(shí)時(shí)處理功能的發(fā)揮主要依托一致性的內(nèi)部程度的接口和針對(duì)性程度的編制,將參數(shù)整合到某一具體平臺(tái)后進(jìn)行處理,該類處理方式要求開發(fā)人員具備較強(qiáng)的程度開發(fā)能力,且硬件設(shè)備配置要求較高。因此,本文提出以Flink以及Flink SQL實(shí)時(shí)計(jì)算框架為理論基礎(chǔ),在此框架上構(gòu)建實(shí)時(shí)數(shù)倉(cāng)計(jì)算平臺(tái),簡(jiǎn)化針對(duì)性程序處理難度,進(jìn)而為Flink實(shí)時(shí)數(shù)倉(cāng)的系統(tǒng)設(shè)計(jì)及功能實(shí)現(xiàn)提供更多的經(jīng)驗(yàn)參考。
隨著社會(huì)邁入數(shù)字經(jīng)濟(jì)時(shí)代,數(shù)據(jù)已成為不容忽視的生產(chǎn)要素?;ヂ?lián)網(wǎng)平臺(tái)和移動(dòng)產(chǎn)業(yè)在全行業(yè)普及,企業(yè)信息化在提升生產(chǎn)效率的同時(shí)也產(chǎn)生了大量的數(shù)據(jù)。由于企業(yè)的信息化往往是逐步開展,最初沒有整體規(guī)劃,在建設(shè)企業(yè)內(nèi)部數(shù)據(jù)平臺(tái)時(shí)往往面臨的底層數(shù)據(jù)架構(gòu)和系統(tǒng)架構(gòu)的巨大差異。離線數(shù)據(jù)倉(cāng)庫(kù)的時(shí)效性存在一定延遲,較難滿足實(shí)時(shí)性要求高的數(shù)據(jù)需求。各系統(tǒng)在開發(fā)后期及運(yùn)營(yíng)過程中,定制化報(bào)表的需求多,定制化程度高。因此建設(shè)一套實(shí)時(shí)數(shù)據(jù)抽取轉(zhuǎn)換平臺(tái),支持基于日志文件、數(shù)據(jù)庫(kù)表等數(shù)據(jù)源進(jìn)行數(shù)據(jù)抽取轉(zhuǎn)換,并進(jìn)行實(shí)時(shí)、離線的數(shù)據(jù)匯總及圖表呈現(xiàn),可滿足數(shù)據(jù)整合展現(xiàn)需要,對(duì)現(xiàn)有系統(tǒng)侵入性小,具有良好的拓展性。
在大數(shù)據(jù)信息時(shí)代,企業(yè)的市場(chǎng)競(jìng)爭(zhēng)優(yōu)劣往往體現(xiàn)在大體量數(shù)據(jù)信息的處理質(zhì)量和處理效率上,越來越多的企業(yè)需要將海量參數(shù)中蘊(yùn)含的信息計(jì)算后得出數(shù)據(jù)和數(shù)據(jù)背后蘊(yùn)藏的價(jià)值,進(jìn)而指導(dǎo)企業(yè)戰(zhàn)略方案的制定。本文分析了Flink這一現(xiàn)代企業(yè)中應(yīng)用廣泛的計(jì)算方式,在充分了解該算法引擎具備的商業(yè)價(jià)值和經(jīng)濟(jì)價(jià)值的基礎(chǔ)上,也看到了該引擎應(yīng)用的諸多劣勢(shì),其局限性主要體現(xiàn)在以下方面:
(1)Flink Job的部署依賴于其本身的操作命令,對(duì)開發(fā)和運(yùn)維人員功能實(shí)現(xiàn)所具備的要求較高;
(2)Flink雖然在1.10版本集成了Blink,在1.13.2版本對(duì)SQL做了2次語法更新,但是對(duì)一些復(fù)雜的業(yè)務(wù)支持依然不好,且SQL本身的執(zhí)行依賴SQL客戶端或者Table的API,對(duì)開發(fā)人員并不友好;
(3)Flink在不同環(huán)境下的部署,其本身自帶的UI管理平臺(tái)并不適用,以Hadoop為例,該環(huán)境下更是各自job管理各自的內(nèi)容、實(shí)現(xiàn)各自目的,缺少統(tǒng)一的監(jiān)管平臺(tái)。
同時(shí),以實(shí)時(shí)計(jì)算引擎對(duì)比參數(shù)為例分析各不同軟件之間的性能,具體對(duì)比示意如表1所示。由表1可知,F(xiàn)link支撐下各項(xiàng)參數(shù)信息能夠得到較好的把控,各功能也能得到圓滿的實(shí)現(xiàn)與完成,因此,針對(duì)以上實(shí)際應(yīng)用中存在的問題,筆者基于Flink實(shí)時(shí)數(shù)倉(cāng)進(jìn)行系統(tǒng)設(shè)計(jì)及功能分析,設(shè)計(jì)出一套完整的實(shí)時(shí)計(jì)算系統(tǒng)來解決現(xiàn)實(shí)問題。
表1:實(shí)時(shí)計(jì)算引擎對(duì)比參數(shù)統(tǒng)計(jì)表
Apache Flink是以分布式數(shù)據(jù)流處理和批量數(shù)據(jù)信息挖掘?yàn)槟繕?biāo)的計(jì)算平臺(tái),屬于開源性平臺(tái)之一,能夠在Flink正常運(yùn)行時(shí)提供上述兩種數(shù)據(jù)信息挖掘的技術(shù)支撐,計(jì)算方案的開源性設(shè)計(jì),有利于系統(tǒng)運(yùn)行時(shí)冗余度的增大,系統(tǒng)針對(duì)流處理和批處理兩種不同的應(yīng)用類型,借助系統(tǒng)內(nèi)不同的功能模塊實(shí)現(xiàn)參數(shù)信息獲取的不同目標(biāo)。在此過程中,流處理數(shù)據(jù)處理方式對(duì)時(shí)效性要求和處理容量要求較批處理方式更低,為節(jié)能系統(tǒng)設(shè)計(jì),往往需要兩套參數(shù)計(jì)算的運(yùn)營(yíng)方式。
Flink的核心計(jì)算架構(gòu)如圖1,圖中Flink Runtime執(zhí)行引擎是分布式系統(tǒng),能夠接受數(shù)據(jù)流程序并在一臺(tái)或多臺(tái)機(jī)器上以容錯(cuò)方式執(zhí)行。Flink Runtime執(zhí)行引擎可作為YARN(Yet Another Resource Negotiator)應(yīng)用程序在集群上運(yùn)行,也可以在Mesos集群上運(yùn)行,還可以在單機(jī)上運(yùn)行,為實(shí)現(xiàn)諸多功能奠定技術(shù)基礎(chǔ)。
圖1:Flink核心計(jì)算架構(gòu)圖
數(shù)據(jù)倉(cāng)庫(kù)作為面向主題的、集成的、相對(duì)穩(wěn)定的、反映歷史變化的數(shù)據(jù)集合,用于支持管理決策。然而,隨著數(shù)據(jù)時(shí)效性在企業(yè)運(yùn)營(yíng)中的重要性日益凸現(xiàn),傳統(tǒng)的離線數(shù)據(jù)倉(cāng)庫(kù)架構(gòu)難以滿足數(shù)據(jù)實(shí)時(shí)分析需求,同時(shí)Lambda架構(gòu)存在開發(fā)效率低、維護(hù)成本高等瓶頸,因此,基于Flink引擎、Kappa架構(gòu)實(shí)現(xiàn)的實(shí)時(shí)數(shù)據(jù)倉(cāng)庫(kù)已成為數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用的新趨勢(shì)。
隨著當(dāng)前階段網(wǎng)絡(luò)信息技術(shù)的迅速發(fā)展,大數(shù)據(jù)處理呈現(xiàn)出非常明顯的實(shí)時(shí)化趨勢(shì),各種各樣的現(xiàn)實(shí)生活場(chǎng)景對(duì)大數(shù)據(jù)處理技術(shù)的使用信手拈來。例如,春晚直播實(shí)時(shí)大屏、“雙11”購(gòu)物節(jié)實(shí)時(shí)成交額統(tǒng)計(jì)和媒體匯報(bào)、智慧城市建設(shè)的實(shí)時(shí)監(jiān)測(cè)交通、銀行系統(tǒng)實(shí)時(shí)風(fēng)控監(jiān)測(cè)等。此外,當(dāng)打開淘寶、天貓等應(yīng)用軟件時(shí),會(huì)根據(jù)用戶不同的習(xí)慣進(jìn)行實(shí)時(shí)個(gè)性化推薦。由此可知,在未來社會(huì)的進(jìn)步與經(jīng)濟(jì)繁榮發(fā)展中,實(shí)時(shí)化即未來,是當(dāng)下大數(shù)據(jù)處理的主流趨勢(shì)。
根據(jù)Flink原生的流處理系統(tǒng),保證低延遲性、滿足低延遲性場(chǎng)景要求、完善API和容錯(cuò)性、使用和部署相對(duì)簡(jiǎn)單和Flink社區(qū)響應(yīng)速度非??斓幕厩疤嵯?,設(shè)計(jì)出一種基于Flink實(shí)時(shí)數(shù)倉(cāng)的系統(tǒng),分為數(shù)倉(cāng)體系和數(shù)倉(cāng)管理平臺(tái)兩個(gè)部分,整體架構(gòu)體系如圖2。
圖2:整體架構(gòu)體系圖
就數(shù)倉(cāng)架構(gòu)本身而言,由于數(shù)據(jù)倉(cāng)庫(kù)的運(yùn)行是以各個(gè)模塊之間相互配合為基礎(chǔ)的,但各管理目標(biāo)之間往往是相互獨(dú)立的,各自完成自身的設(shè)計(jì)功能,能通過隊(duì)列或者restFull進(jìn)行數(shù)據(jù)交互,缺乏統(tǒng)一管理的平臺(tái)。本文設(shè)計(jì)的數(shù)倉(cāng)(ETL)管理平臺(tái)就是為了解決該問題,使運(yùn)營(yíng)人員能夠在數(shù)據(jù)采集、文件管理、任務(wù)創(chuàng)建和發(fā)布、任務(wù)監(jiān)控等方面更方便地監(jiān)聽整個(gè)數(shù)倉(cāng)體系。此外,基于Flink實(shí)時(shí)數(shù)倉(cāng)的系統(tǒng)管理平臺(tái)支持Fast-jar的方式創(chuàng)建Job,同時(shí)支持SQL的方式創(chuàng)建SQL-Job任務(wù)。
在該系統(tǒng)的應(yīng)用中,主要包含數(shù)據(jù)采集層、實(shí)時(shí)計(jì)算層、數(shù)據(jù)存儲(chǔ)層、數(shù)據(jù)展示層和服務(wù)監(jiān)控層五部分。其中,數(shù)據(jù)采集層基于Debeziium、Flume等工具采集實(shí)時(shí)數(shù)據(jù),將采集到的原始數(shù)據(jù)(ODS)放到消息隊(duì)列Kafka中等待消費(fèi)。
實(shí)時(shí)計(jì)算層基于Kafka消息隊(duì)列及Flink實(shí)時(shí)計(jì)算引擎,針對(duì)所采集的數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗、數(shù)據(jù)解析、分析計(jì)算,并將計(jì)算結(jié)果。在此過程中,F(xiàn)link本身支持SQL任務(wù)和Fast-Jar任務(wù)2種方式計(jì)算Job,但提交過程依賴Flink SQL Client所在客戶端或Flink自帶的UI界面,而杉樹2種方式不統(tǒng)一且缺乏命令復(fù)雜,對(duì)開發(fā)者和運(yùn)維人員都非常不友好。故本文在數(shù)倉(cāng)管理平臺(tái)界面對(duì)其進(jìn)行了統(tǒng)一形式的創(chuàng)建和部署。除了原始的Fast-Jar任務(wù)以外,管理平臺(tái)將SQL任務(wù)集成為UDF,通過動(dòng)態(tài)連接器、動(dòng)態(tài)依賴Jar等方式來靈活構(gòu)建不同的SQL_Job,極大地方便了開發(fā)、運(yùn)維人員創(chuàng)建新的計(jì)算任務(wù)。
數(shù)據(jù)存儲(chǔ)層是平臺(tái)利用分布式存儲(chǔ)架構(gòu)根據(jù)數(shù)據(jù)場(chǎng)景及應(yīng)用需求進(jìn)行個(gè)性化存儲(chǔ),通過 Hive、HBase、HDFS、Redis、RDBMS等存儲(chǔ)模型,為結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)、實(shí)時(shí)數(shù)據(jù)等不同類型的數(shù)據(jù)提供存儲(chǔ)支持。就整個(gè)數(shù)倉(cāng)平臺(tái)而言,針對(duì)不同階段的數(shù)據(jù)會(huì)采用不同的存儲(chǔ)方案存儲(chǔ)數(shù)據(jù),如Kafa用來存儲(chǔ)ODS、DWS、DWD等數(shù)據(jù),HBase存儲(chǔ)維表數(shù)據(jù)、DWD、DWS等數(shù)據(jù),Hive存放ODS數(shù)據(jù);Apache Driud存儲(chǔ)ADS等數(shù)據(jù)。
在數(shù)據(jù)展示層中,操作人員可通過Web界面進(jìn)行交互,實(shí)現(xiàn)對(duì)實(shí)時(shí)監(jiān)控、觀察報(bào)警統(tǒng)計(jì)數(shù)據(jù),同時(shí)支持狀態(tài)在線分析、設(shè)備能耗分析等功能。系統(tǒng)使用Apache Suerset作為可視化界面的實(shí)現(xiàn)方案,借助其快速直觀、輕量級(jí)、具有豐富的功能選項(xiàng)等優(yōu)勢(shì),使各種用戶都可以輕松地以可視化的方式瀏覽數(shù)據(jù),實(shí)現(xiàn)簡(jiǎn)單的折線圖到高度詳細(xì)的地理空間圖的閱覽過程。
下文以某城市交通卡監(jiān)控指標(biāo)實(shí)時(shí)分析為例分析Flink實(shí)時(shí)數(shù)倉(cāng)系統(tǒng)的測(cè)試運(yùn)行效果,通過Debezium工具監(jiān)聽交通卡數(shù)據(jù)庫(kù),獲取相應(yīng)的CDC行級(jí)別數(shù)據(jù)變動(dòng),寫入Kafka給后續(xù)任務(wù)分析計(jì)算。然后選擇地鐵人流量(分鐘)、站點(diǎn)人流量(分鐘)、站點(diǎn)人流TOP_N(分鐘級(jí)別)、站點(diǎn)人流TOP_N(天累計(jì))、用戶上下站點(diǎn)線路圖等為統(tǒng)計(jì)指標(biāo),按照?qǐng)D3所示的數(shù)據(jù)分析過程,探究最終實(shí)現(xiàn)結(jié)果,圖4即為地鐵各線路人流趨勢(shì)圖,由此分析可知,F(xiàn)link實(shí)時(shí)數(shù)倉(cāng)系統(tǒng)能夠在采集實(shí)時(shí)數(shù)據(jù)信息的基礎(chǔ)上,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)存儲(chǔ)、實(shí)時(shí)數(shù)據(jù)分析、實(shí)時(shí)監(jiān)控告警和實(shí)時(shí)數(shù)據(jù)報(bào)表生成等諸多功能,實(shí)現(xiàn)參數(shù)信息的提取和后續(xù)決策的指導(dǎo)。以下給出部分系統(tǒng)中的性能數(shù)據(jù)舉例:
圖3:交通卡數(shù)據(jù)分析過程
圖4:地鐵各線路人流趨勢(shì)圖
- 讀取Kafka主題中1000w數(shù)據(jù),分發(fā)給6個(gè)不同主題
- 處理速率約為27000/s
開窗計(jì)算
- 事件時(shí)間開窗計(jì)算730w條數(shù)據(jù)行,統(tǒng)計(jì)總?cè)肆骱蛡€(gè)線路人流量
- 處理速率35000/s
CEP
- 使用CEP計(jì)算進(jìn)站后6小時(shí)內(nèi)人員進(jìn)出站情況
- 在測(cè)試YARN環(huán)境下運(yùn)行速度約為17500/s
總之,本文基于流批一體計(jì)算引擎Flink設(shè)計(jì)大數(shù)據(jù)實(shí)時(shí)分析平臺(tái),對(duì)實(shí)際生產(chǎn)過程中產(chǎn)生的海量數(shù)據(jù)進(jìn)行實(shí)時(shí)采集、處理、分析與存儲(chǔ),面向不同格式的數(shù)據(jù)進(jìn)行定制化存儲(chǔ),從而提供實(shí)時(shí)化、自動(dòng)化的分析決策,可以實(shí)現(xiàn)支撐監(jiān)測(cè)大屏、看板系統(tǒng)、報(bào)表系統(tǒng)、分析報(bào)警系統(tǒng)等多種場(chǎng)景的實(shí)時(shí)數(shù)據(jù)分析。在實(shí)時(shí)數(shù)據(jù)處理框架中,借助Flink工具在容錯(cuò)性、實(shí)時(shí)性、反壓方面相較于其他框架悠著較大的優(yōu)勢(shì),提出基于Flink實(shí)時(shí)計(jì)算框架,構(gòu)建實(shí)時(shí)計(jì)算平臺(tái),讓用戶通過SQL語句來創(chuàng)建任務(wù),并通過可視化頁面監(jiān)控任務(wù)的執(zhí)行,實(shí)現(xiàn)了基于Flink實(shí)時(shí)數(shù)倉(cāng)的系統(tǒng)設(shè)計(jì)及功能實(shí)現(xiàn)。
在該系統(tǒng)的后續(xù)應(yīng)用和優(yōu)化設(shè)計(jì)創(chuàng)新中,可在以下方面進(jìn)行優(yōu)化:首先,盡管SQL語句能在任務(wù)創(chuàng)建上更加方便簡(jiǎn)潔,但是對(duì)于一些負(fù)責(zé)和細(xì)節(jié)上的操作首選方案還是原生API。其次,就可視化視圖方面,本次設(shè)計(jì)方案中使用的是Apache superset,該工具是一種開源的框架,其提供的Dashboard種類有限,需要有用戶自擴(kuò)展Dashboard,或者重新搭建大屏展示界面。最后,F(xiàn)link實(shí)時(shí)數(shù)倉(cāng)系統(tǒng)在當(dāng)前框架中缺少血緣分析,且目前只能從Flink作業(yè)監(jiān)控頁面,查看每個(gè)算子輸入和輸出的數(shù)據(jù)量大小,無法從交互頁面進(jìn)行查看。未來,基于Flink實(shí)時(shí)數(shù)倉(cāng)的系統(tǒng)設(shè)計(jì)可在上述三個(gè)方面進(jìn)行進(jìn)一步的優(yōu)化設(shè)計(jì),保證其功能實(shí)現(xiàn)過程更加優(yōu)良。