周佳佳
(南通市測繪院有限公司 江蘇 南通 226000)
隨著新能源技術(shù)的日漸成熟,電動(dòng)汽車的市場占有量越來越大,在安全以及補(bǔ)貼的標(biāo)準(zhǔn)上,國家明確車企需要實(shí)時(shí)監(jiān)控電動(dòng)汽車的電池狀況、電壓狀況、車輛狀態(tài)、溫度狀況和地理位置(地理位置獲取只限公共汽車)等信息,對故障信息等進(jìn)行分析、預(yù)警處理。而面對海量的電動(dòng)汽車報(bào)文數(shù)據(jù),常規(guī)的分析系統(tǒng)已無法滿足其性能要求,因此本文采用基于大數(shù)據(jù)框架Flume+Kafka+Storm+HBase的組合來組建實(shí)時(shí)分析系統(tǒng)。Flume+Kafka+Storm+HBase的組合技術(shù),是一個(gè)流程化的組合,涉及報(bào)文數(shù)據(jù)實(shí)時(shí)分析的完整生命流程,詳細(xì)流程包含數(shù)據(jù)采集、數(shù)據(jù)緩沖、數(shù)據(jù)清洗-分析計(jì)算、結(jié)果入庫四個(gè)步驟。
電動(dòng)汽車報(bào)文實(shí)時(shí)分析系統(tǒng)相比較傳統(tǒng)的分析系統(tǒng),實(shí)時(shí)分析系統(tǒng)具備了高并發(fā)、低延時(shí)、高可擴(kuò)展、高可用的特性。
系統(tǒng)核心結(jié)構(gòu)由數(shù)據(jù)源、數(shù)據(jù)緩沖區(qū)、實(shí)時(shí)數(shù)據(jù)清洗-分析器、結(jié)果存儲(chǔ)區(qū)四部分組成。其系統(tǒng)總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
系統(tǒng)的整個(gè)流程包含采集報(bào)文數(shù)據(jù)、報(bào)文數(shù)據(jù)緩沖、實(shí)時(shí)分析、結(jié)果入庫四個(gè)步驟,其詳細(xì)流程為:
(1)平臺(tái)將數(shù)據(jù)源中需要處理的數(shù)據(jù)推送到數(shù)據(jù)緩沖區(qū)。
(2)實(shí)時(shí)數(shù)據(jù)清洗-分析器的入口線程以輪詢的方式從數(shù)據(jù)緩沖區(qū)拉取數(shù)據(jù)。
(3)實(shí)時(shí)數(shù)據(jù)清洗-分析器的入口線程拉取數(shù)據(jù)后,轉(zhuǎn)發(fā)到數(shù)據(jù)清洗線程,進(jìn)行數(shù)據(jù)清洗。如遇到無效數(shù)據(jù),則將數(shù)據(jù)轉(zhuǎn)回?cái)?shù)據(jù)緩沖區(qū)的無效數(shù)據(jù)區(qū)進(jìn)行存儲(chǔ),實(shí)時(shí)主流程繼續(xù)從數(shù)據(jù)緩沖區(qū)拉取新數(shù)據(jù)處理。
(4)實(shí)時(shí)數(shù)據(jù)清洗-分析器清洗完成后,將結(jié)果轉(zhuǎn)發(fā)到分析計(jì)算線程,進(jìn)行實(shí)時(shí)分析。
(5)實(shí)時(shí)數(shù)據(jù)清洗-分析器分析計(jì)算完成后,將結(jié)果數(shù)據(jù)轉(zhuǎn)發(fā)到入庫線程。
(6)入庫線程最終將結(jié)果數(shù)據(jù)存入結(jié)果存儲(chǔ)區(qū)。
在數(shù)據(jù)源層中,將所有數(shù)據(jù)分為主動(dòng)數(shù)據(jù)和被動(dòng)數(shù)據(jù)兩類:
(1)主動(dòng)數(shù)據(jù):可以主動(dòng)向緩沖區(qū)發(fā)送數(shù)據(jù)的稱為主動(dòng)數(shù)據(jù),如坐標(biāo)轉(zhuǎn)換接口中需要被轉(zhuǎn)換的原始坐標(biāo)數(shù)據(jù),在接口中可以直接將數(shù)據(jù)推入緩沖區(qū)。
(2)被動(dòng)數(shù)據(jù):需要借助外界手段將數(shù)據(jù)推送到緩沖區(qū)的稱為被動(dòng)數(shù)據(jù)。如電動(dòng)汽車報(bào)文數(shù)據(jù),它是一個(gè)不斷累加的文本數(shù)據(jù),它無法直接進(jìn)入緩沖區(qū),因此是被動(dòng)數(shù)據(jù)。
當(dāng)前系統(tǒng)采用Flume集群來對被動(dòng)數(shù)據(jù)進(jìn)行推送。
數(shù)據(jù)緩沖區(qū)需要滿足分布式、高可用、數(shù)據(jù)容災(zāi)、高吞吐量、多計(jì)算共用數(shù)據(jù)的特點(diǎn),因此實(shí)現(xiàn)時(shí)采用Kafka組件作為基礎(chǔ)運(yùn)行環(huán)境,在此基礎(chǔ)上,針對不同的實(shí)時(shí)計(jì)算業(yè)務(wù),可以建立不同的消息隊(duì)列,也可以使用同一個(gè)消息隊(duì)列,這取決于具體的業(yè)務(wù)。
在電動(dòng)汽車報(bào)文實(shí)時(shí)分析系統(tǒng)中,基于Kafka建立一個(gè)Topics,該Topics負(fù)責(zé)接收數(shù)據(jù)源端的數(shù)據(jù),進(jìn)行分區(qū)存儲(chǔ)以及被后續(xù)流程消費(fèi)數(shù)據(jù)。該Topics被分為100個(gè)Partition。
實(shí)時(shí)數(shù)據(jù)清洗-分析器包含兩部分:數(shù)據(jù)清洗、分析計(jì)算。數(shù)據(jù)清洗主要是將接收到的報(bào)文數(shù)據(jù)進(jìn)行基本校驗(yàn)、完整性校驗(yàn)、有效性校驗(yàn),分析計(jì)算主要是將數(shù)據(jù)在業(yè)務(wù)上進(jìn)行分析判斷、歸類。
采用Storm組件作為該層的基礎(chǔ)運(yùn)行環(huán)境,其內(nèi)容包含數(shù)據(jù)拉取器、數(shù)據(jù)分析線程組。分析器的執(zhí)行流程為:數(shù)據(jù)拉取→報(bào)文分析→存儲(chǔ)。
由于整個(gè)平臺(tái)需要處理海量數(shù)據(jù),對于計(jì)算結(jié)果,可能會(huì)比原始數(shù)據(jù)更為龐大,因此采用列式數(shù)據(jù)庫HBase。實(shí)時(shí)數(shù)據(jù)清洗-分析器將數(shù)據(jù)分析后,分類進(jìn)行存儲(chǔ)在HBase中。
軟件基礎(chǔ)設(shè)施包含F(xiàn)lume、Kafka、Storm、HBase四個(gè)功能性集群。
3.3.1 表結(jié)構(gòu)
表結(jié)構(gòu)包含:主報(bào)文表、報(bào)警報(bào)文表、心跳校時(shí)報(bào)文表、錯(cuò)誤表,其中主報(bào)文表存儲(chǔ)所有分析后的報(bào)文數(shù)據(jù),其結(jié)構(gòu)如表1所示。
主報(bào)文表 表1
3.3.2 程序結(jié)構(gòu)
程序以jar包的形式運(yùn)行在Storm環(huán)境中。程序結(jié)構(gòu)包含公用庫(common)、實(shí)時(shí)計(jì)算(realcalcmsg)、查詢接口(webapi)三部分,如圖2所示。
圖2 結(jié)果存儲(chǔ)區(qū)結(jié)構(gòu)圖
(1)公用庫
公用庫中包含配置項(xiàng)、工具包、報(bào)文解析算法。
(2)數(shù)據(jù)清洗-實(shí)時(shí)計(jì)算
實(shí)時(shí)計(jì)算中包含topology、spout、bolt、utils四類代碼。
①topology為RealCalcMessageTopology類,用來組織、管理spout和bolt程序;
②spout為CarMsgSpout類,用來輪詢地拉取kafka中的數(shù)據(jù);
③bolt中分為報(bào)文分析(TopicMessageRichBolt為數(shù)據(jù)清洗-分析)、結(jié)果存儲(chǔ)(MainMessageBolt為主報(bào)文結(jié)果存儲(chǔ),AlertMessageBolt為報(bào)警報(bào)文結(jié)果存儲(chǔ),OtherMessageBolt為心跳終端校時(shí)報(bào)文結(jié)果存儲(chǔ),F(xiàn)ailMessageBolt為非法報(bào)文結(jié)果存儲(chǔ))兩類。
(3)查詢接口
查詢接口中主要包含controller、mapper、model、service、test、utils六類代碼,基于Spring boot、MyBatis框架為基礎(chǔ)實(shí)現(xiàn)。
3.3.3 關(guān)鍵技術(shù)實(shí)現(xiàn)
(1)基于Storm的數(shù)據(jù)清洗-實(shí)時(shí)計(jì)算程序流程
CarMsgSpout程序?qū)afka的topic進(jìn)行監(jiān)聽,如果topic中有新的報(bào)文數(shù)據(jù),則取出一條,將報(bào)文數(shù)據(jù)傳遞給TopicMessageRichBolt程序;TopicMessageRichBolt得到數(shù)據(jù)后,對該條報(bào)文進(jìn)行解析,將字符串報(bào)文拆分成多個(gè)具有業(yè)務(wù)意義的字段,再對字段進(jìn)行有效性驗(yàn)證,根據(jù)驗(yàn)證結(jié)果,分發(fā)到對應(yīng)的存儲(chǔ)bolt(Main、Alert、Other、Fail)中。實(shí)時(shí)計(jì)算的流程如圖3所示。
圖3 電動(dòng)汽車報(bào)文實(shí)時(shí)計(jì)算流程圖
(2)報(bào)文解析
電動(dòng)汽車報(bào)文以16進(jìn)制的字符串形式進(jìn)行傳輸。報(bào)文數(shù)據(jù)的解析基于有限狀態(tài)機(jī)的思想設(shè)計(jì)程序。
解析程序的狀態(tài)機(jī)有三種狀態(tài):
①CHECK_STATE_MESSAGE,解析報(bào)文;
②CHECK_STATE_HEADER,解析報(bào)文頭部信息;
③CHECK_STATE_CONTENT,解析報(bào)文正文。
報(bào)文進(jìn)入解析時(shí),初始狀態(tài)為CHECK_STATE_MESSAGE,每個(gè)狀態(tài)下都會(huì)執(zhí)行對應(yīng)的解析任務(wù),只有解析正常的,才能夠進(jìn)入下一個(gè)狀態(tài),否則,即解析完成。模型如圖4所示。
圖4 基于有限狀態(tài)機(jī)的報(bào)文解析模型圖
某車企基于本系統(tǒng)對電動(dòng)汽車進(jìn)行實(shí)時(shí)數(shù)據(jù)的監(jiān)控與預(yù)警(圖5),該應(yīng)用綜合指標(biāo):
圖5 數(shù)據(jù)清洗-分析器性能監(jiān)控圖
(1)高并發(fā):支持10萬輛車每秒一次的頻率發(fā)送報(bào)文數(shù)據(jù);
(2)低延時(shí):10萬輛車同時(shí)在線的情況下,單條報(bào)文計(jì)算耗時(shí) 2 ms,存儲(chǔ)小于 600 ms;
(3)高擴(kuò)展性:目前計(jì)算節(jié)點(diǎn)3個(gè),存儲(chǔ)節(jié)點(diǎn)5個(gè),并支持計(jì)算節(jié)點(diǎn)、存儲(chǔ)節(jié)點(diǎn)的橫向擴(kuò)展;
(4)高可用性:計(jì)算節(jié)點(diǎn)或主控節(jié)點(diǎn)出現(xiàn)故障導(dǎo)致無法計(jì)算時(shí),自動(dòng)將任務(wù)轉(zhuǎn)移到計(jì)算節(jié)點(diǎn)或備用主控節(jié)點(diǎn)上。
支持同時(shí)處理10萬輛車的實(shí)時(shí)報(bào)文數(shù)據(jù),其單條報(bào)文的分析耗時(shí) 2 ms,單條報(bào)文的存儲(chǔ) 100 ms;當(dāng)前計(jì)算節(jié)點(diǎn)3個(gè),支持計(jì)算節(jié)點(diǎn)的橫向擴(kuò)展。
某車企基于本系統(tǒng)對電動(dòng)汽車進(jìn)行實(shí)時(shí)數(shù)據(jù)的監(jiān)控與預(yù)警,如圖6所示。
圖6 電動(dòng)汽車實(shí)時(shí)數(shù)據(jù)的監(jiān)控與預(yù)警圖
本文采用的組合技術(shù)方案與常用的方案進(jìn)行了比較,如表2所示。
技術(shù)方案比較表 表2
經(jīng)過對比發(fā)現(xiàn),本文技術(shù)在實(shí)時(shí)性、可擴(kuò)展性、高可用性方面較常用方案有很大的優(yōu)勢。
本文采用基于Flume+Kafka+Storm+HBase的大數(shù)據(jù)技術(shù),實(shí)現(xiàn)了電動(dòng)汽車報(bào)文實(shí)時(shí)分析系統(tǒng),其優(yōu)勢主要有三點(diǎn),一是低延時(shí)性,保證了車輛分析和預(yù)警的及時(shí)性;二是高并發(fā)性,保證了最大在線車輛監(jiān)控的性能需求;三是高可用性,在某些基礎(chǔ)設(shè)施發(fā)生故障后,依然可以保證系統(tǒng)的正常運(yùn)行;四是高可擴(kuò)展性,為將來電動(dòng)汽車擁有量越來越大提供了擴(kuò)展空間。
本文所闡述的技術(shù)與系統(tǒng)不僅僅能應(yīng)用在電動(dòng)汽車領(lǐng)域,也可應(yīng)用在其他有高實(shí)時(shí)性需求的行業(yè)。