摘要:文章提出一種基于Spark Streaming實(shí)時(shí)數(shù)據(jù)流處理框架,使用Kafka作為車輛軌跡數(shù)據(jù)的消息隊(duì)列服務(wù),結(jié)合拓?fù)潢P(guān)系判斷算法射線法的車輛電子圍欄技術(shù)。應(yīng)用表明,該技術(shù)能夠處理高吞吐率、強(qiáng)實(shí)時(shí)性的車輛動(dòng)態(tài)數(shù)據(jù),滿足車輛動(dòng)態(tài)精細(xì)化監(jiān)管需求。
關(guān)鍵詞:電子圍欄;Spark Streaming;Kafka;射線法
U495A551773
0 引言
隨著物聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等新興技術(shù)在交通領(lǐng)域的推廣與應(yīng)用,在緩解道路擁堵、優(yōu)化出行服務(wù)、保障交通安全上取得了顯著成效,推進(jìn)了智能、安全、高效的交通系統(tǒng)建設(shè)。新興技術(shù)在為交通建設(shè)提供新的智慧化、科技化實(shí)施方案的同時(shí),也為交通領(lǐng)域的發(fā)展帶來新的方向與挑戰(zhàn)。為預(yù)防和減少道路運(yùn)輸交通事故,交通運(yùn)輸部自《道路運(yùn)輸車輛動(dòng)態(tài)監(jiān)督管理辦法》公布施行起一直大力推進(jìn)道路運(yùn)輸車輛動(dòng)態(tài)監(jiān)管工作。因此,如何利用智能數(shù)字化手段,提升交通安全風(fēng)險(xiǎn)監(jiān)測(cè)預(yù)警能力與精細(xì)化管理能力具有非常重要的意義。
車輛動(dòng)態(tài)軌跡數(shù)據(jù)作為交通大數(shù)據(jù),具有實(shí)時(shí)性強(qiáng)、數(shù)據(jù)量大、數(shù)據(jù)共享需求等特點(diǎn),傳統(tǒng)的交通數(shù)據(jù)處理框架已無法滿足有高吞吐率、強(qiáng)實(shí)時(shí)性的交通智能化時(shí)代交通大數(shù)據(jù)的管理與應(yīng)用需求。交通大數(shù)據(jù)領(lǐng)域的應(yīng)用例如車輛軌跡監(jiān)測(cè)、危險(xiǎn)車輛識(shí)別、車流量預(yù)測(cè)等,大部分使用MapReduce框架處理離線數(shù)據(jù),實(shí)時(shí)性與計(jì)算效率較低,無法滿足實(shí)時(shí)處理的需求。
電子圍欄技術(shù),是指在電子地圖中繪制虛擬邊界,電子圍欄系統(tǒng)根據(jù)監(jiān)控實(shí)體的地理位置數(shù)據(jù),實(shí)時(shí)判斷監(jiān)控實(shí)體與電子圍欄區(qū)域拓?fù)潢P(guān)系的技術(shù)。相較于需要實(shí)體圍欄邊界設(shè)備的圍欄技術(shù),電子圍欄技術(shù)具有低成本、實(shí)時(shí)性、可擴(kuò)展等特點(diǎn),能夠?qū)囕v動(dòng)態(tài)進(jìn)行有效的實(shí)時(shí)監(jiān)測(cè),對(duì)車輛安全風(fēng)險(xiǎn)進(jìn)行預(yù)警。
本文提出一種基于Spark Streaming的車輛電子圍欄技術(shù),利用物聯(lián)網(wǎng)、大數(shù)據(jù)等技術(shù),可以滿足高效、實(shí)時(shí)的車輛動(dòng)態(tài)精細(xì)化監(jiān)管需求。
1 關(guān)鍵技術(shù)
1.1 Kafka
Apache Kafka是一個(gè)高吞吐、持久性、實(shí)時(shí)性的開源分布式消息訂閱和發(fā)布系統(tǒng),常用作實(shí)時(shí)數(shù)據(jù)流樞紐、系統(tǒng)日志服務(wù)、消息隊(duì)列服務(wù),在海量數(shù)據(jù)的傳輸與處理上被廣泛應(yīng)用[1]。
生產(chǎn)者(Producer)、消費(fèi)者(Consumer)、代理(Broker)三大組件構(gòu)成Kafka的基本架構(gòu)。其中,生產(chǎn)者是消息的來源,負(fù)責(zé)收集消息推送至代理;代理負(fù)責(zé)接收消息,將數(shù)據(jù)存儲(chǔ)并持久化;消費(fèi)者接收并處理代理推送的消息。每條發(fā)布到Kafka集群的消息都有一個(gè)主題(Topic),每個(gè)主題都有若干個(gè)隊(duì)列分區(qū)(Partition),每個(gè)分區(qū)內(nèi)的每條消息都有一個(gè)唯一遞增的序列號(hào)偏移量(Offset)。生產(chǎn)者將消息發(fā)往選定主題的選定分區(qū),消費(fèi)者接收選定主題的消息,保存偏移量信息。
本文使用Apache Kafka作為車輛實(shí)時(shí)數(shù)據(jù)的消息隊(duì)列服務(wù)。
1.2 Spark Streaming
Apache Spark Streaming是基于Apache Spark的實(shí)時(shí)數(shù)據(jù)流處理框架,具有高吞吐、擴(kuò)展性、容錯(cuò)性等特點(diǎn),支持Kafka、Flume、HDFS等多數(shù)據(jù)源,提供map、reduce、join和window等高級(jí)功能及復(fù)雜算子處理流數(shù)據(jù),最終將數(shù)據(jù)處理結(jié)果輸出至文件系統(tǒng)、數(shù)據(jù)庫、實(shí)時(shí)流[2]。
Spark Streaming在運(yùn)行過程中將實(shí)時(shí)數(shù)據(jù)流按照一定的時(shí)間間隔分隔成不同批次數(shù)據(jù),切片數(shù)據(jù)經(jīng)由Spark Engine處理得到對(duì)應(yīng)批次結(jié)果。Spark Streaming提供表示在切片內(nèi)部連續(xù),切片之間相互獨(dú)立,高度抽象的特有數(shù)據(jù)類型DStream。DStream由一系列連續(xù)的RDD(彈性分布式數(shù)據(jù)集)構(gòu)成,按照時(shí)間間隔分隔的實(shí)時(shí)數(shù)據(jù)流切片數(shù)據(jù)對(duì)應(yīng)一個(gè)RDD實(shí)例。實(shí)時(shí)數(shù)據(jù)流會(huì)通過一個(gè)先進(jìn)先出的隊(duì)列,由Spark Engine處理,依次取出切片數(shù)據(jù),并把切片數(shù)據(jù)封裝成RDD。開發(fā)者可借助Spark Streaming提供的高級(jí)功能實(shí)現(xiàn)復(fù)雜、高效的流計(jì)算。圖1為Spark Streaming運(yùn)行過程示意圖。
相較于傳統(tǒng)的大數(shù)據(jù)處理框架Hadoop MapReduce,Spark Streaming因其高吞吐、可擴(kuò)展、容錯(cuò)性等特點(diǎn)更能解決實(shí)時(shí)與快速計(jì)算需求,故本文使用Apache Spark Streaming作為車輛實(shí)時(shí)數(shù)據(jù)的實(shí)時(shí)數(shù)據(jù)流處理框架。
1.3 拓?fù)潢P(guān)系判斷算法
地理空間中的空間目標(biāo)之間存在各種空間關(guān)系,主要有度量空間關(guān)系、順序空間關(guān)系、拓?fù)淇臻g關(guān)系[3]。拓?fù)潢P(guān)系描述了空間對(duì)象在拓?fù)渥儞Q下具有的拓?fù)洳蛔兞?,是空間關(guān)系中最重要的基本關(guān)系[4]。本文關(guān)注的拓?fù)潢P(guān)系是車輛與電子圍欄區(qū)域之間的拓?fù)潢P(guān)系,主要涉及的拓?fù)潢P(guān)系判斷是點(diǎn)與面的拓?fù)潢P(guān)系判斷。
點(diǎn)與多邊形位置關(guān)系的判斷是計(jì)算幾何中的算法,常用的有射線法、轉(zhuǎn)角法、面積判斷法、柵格法[5]。射線法的算法核心是從點(diǎn)沿x軸作一條射線,若該射線與多邊形邊界的交點(diǎn)個(gè)數(shù)為奇數(shù),則點(diǎn)在多邊形內(nèi)部;若該射線與多邊形邊界的交點(diǎn)個(gè)數(shù)為偶數(shù),則點(diǎn)在多邊形外部。射線法具有高精度、低時(shí)間復(fù)雜度等特點(diǎn),故本文采用射線法作為點(diǎn)與面的拓?fù)潢P(guān)系判斷算法。
2 技術(shù)實(shí)現(xiàn)
車輛電子圍欄技術(shù)框架總體結(jié)構(gòu)從上到下可以分為數(shù)據(jù)終端層、數(shù)據(jù)接入層、數(shù)據(jù)處理層、數(shù)據(jù)寫入層、數(shù)據(jù)分發(fā)層,見圖2。
數(shù)據(jù)終端層是識(shí)別和管理車輛終端設(shè)備,包含車載GPS和其他定位設(shè)備。
數(shù)據(jù)接入層是使用數(shù)據(jù)接入程序通過809協(xié)議獲取車輛定位數(shù)據(jù),并作為Kafka生產(chǎn)者(Producer)將數(shù)據(jù)寫入Kafka主題(Topics)。
數(shù)據(jù)處理層作為Kafka消費(fèi)者(Consumer),讀取實(shí)時(shí)數(shù)據(jù)流,實(shí)時(shí)數(shù)據(jù)流經(jīng)Spark Streaming轉(zhuǎn)換成DStream,交由射線法判斷車輛實(shí)時(shí)定位與電子圍欄區(qū)域的拓?fù)潢P(guān)系,予以相應(yīng)標(biāo)識(shí)。
數(shù)據(jù)處理層處理后的數(shù)據(jù)將作為Kafka生產(chǎn)者,由數(shù)據(jù)寫入層寫入至新的Kafka主題與數(shù)據(jù)庫。
數(shù)據(jù)分發(fā)層負(fù)責(zé)將數(shù)據(jù)處理層處理后的數(shù)據(jù)按需分配Kafka消費(fèi)者,供各個(gè)消費(fèi)終端使用。
3 技術(shù)應(yīng)用
3.1 應(yīng)用場(chǎng)景
本文研究的基于Spark Streaming的車輛電子圍欄技術(shù)已應(yīng)用于廣西道路運(yùn)輸“兩客一?!睜I(yíng)運(yùn)車輛動(dòng)態(tài)數(shù)據(jù)電子圍欄項(xiàng)目實(shí)施。廣西道路運(yùn)輸“兩客一?!睜I(yíng)運(yùn)車輛動(dòng)態(tài)數(shù)據(jù)覆蓋全區(qū)各地市,暫未按照地市對(duì)數(shù)據(jù)進(jìn)行劃分,導(dǎo)致共享給所有單位的都是全區(qū)的數(shù)據(jù)。為降低敏感信息泄露風(fēng)險(xiǎn),結(jié)合廣西各有關(guān)部門對(duì)廣西道路運(yùn)輸“兩客一危”營(yíng)運(yùn)車輛動(dòng)態(tài)數(shù)據(jù)的共享需求,遵循“屬地內(nèi)數(shù)據(jù)共享”標(biāo)準(zhǔn),對(duì)廣西道路運(yùn)輸“兩客一?!避囕v軌跡動(dòng)態(tài)數(shù)據(jù)進(jìn)行“電子圍欄”開發(fā),并進(jìn)行相關(guān)脫敏處理,以支撐相關(guān)車輛動(dòng)態(tài)數(shù)據(jù)的合規(guī)共享。
該項(xiàng)目主要包含以下實(shí)施內(nèi)容:
(1)開發(fā)數(shù)據(jù)接入程序模塊,解析809協(xié)議并將車輛軌跡實(shí)時(shí)數(shù)據(jù)寫入Kafka消息系統(tǒng)。
(2)基于廣西14個(gè)地市地理信息數(shù)據(jù)整理,形成地市區(qū)域電子圍欄。
(3)基于Spark Streaming流處理框架,開發(fā)車輛與電子圍欄區(qū)域拓?fù)潢P(guān)系判斷算法模塊,處理廣西道路運(yùn)輸“兩客一?!避囕v軌跡實(shí)時(shí)流數(shù)據(jù)。
(4)將處理后數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫,通過廳共享交換平臺(tái)進(jìn)行共享分發(fā)。
(5)根據(jù)應(yīng)用場(chǎng)景,構(gòu)建多Kafka主題,供各地市使用。
運(yùn)行環(huán)境如表1所示,搭建有1臺(tái)集群主機(jī)與4個(gè)集群節(jié)點(diǎn),Spark、Kafka與Mysql程序均使用集群部署,由ZooKeeper程序統(tǒng)一調(diào)度管理;處理后數(shù)據(jù)分發(fā)至Kafka主題,存儲(chǔ)至集群Mysql數(shù)據(jù)庫。
3.2 應(yīng)用效果
本文研究的基于Spark Streaming的車輛電子圍欄技術(shù)應(yīng)用于廣西道路運(yùn)輸“兩客一危”營(yíng)運(yùn)車輛動(dòng)態(tài)數(shù)據(jù)電子圍欄項(xiàng)目實(shí)踐效果良好,如圖3的統(tǒng)計(jì)數(shù)據(jù)所示,平均每日處理數(shù)據(jù)量達(dá)1 500萬條,總計(jì)處理數(shù)據(jù)量超十億,針對(duì)應(yīng)用場(chǎng)景分發(fā)Kafka主題超過20個(gè),滿足了廣西“兩客一?!避囕v電子圍欄項(xiàng)目對(duì)危險(xiǎn)貨物運(yùn)輸車輛等重點(diǎn)營(yíng)運(yùn)車輛監(jiān)管與地市交通運(yùn)輸主管部門對(duì)交通運(yùn)輸“兩客一危”營(yíng)運(yùn)車輛動(dòng)態(tài)數(shù)據(jù)的共享需求,相較于常規(guī)數(shù)據(jù)處理框架技術(shù),能夠處理高吞吐、高實(shí)時(shí)性的應(yīng)用場(chǎng)景;多應(yīng)用場(chǎng)景的Kafka主題分發(fā),遵循了“屬地內(nèi)數(shù)據(jù)共享”標(biāo)準(zhǔn),實(shí)現(xiàn)了數(shù)據(jù)脫敏。
4 結(jié)語
本文提出了使用Kafka作為車輛實(shí)時(shí)數(shù)據(jù)的消息隊(duì)列服務(wù),基于Spark Streaming實(shí)時(shí)數(shù)據(jù)流處理框架,結(jié)合拓?fù)潢P(guān)系判斷算法射線法的車輛電子圍欄技術(shù)。本文實(shí)現(xiàn)的技術(shù)有以下優(yōu)勢(shì):
(1)處理能力強(qiáng)。采用具有高吞吐率、實(shí)時(shí)性、擴(kuò)展性的Kafka消息隊(duì)列服務(wù)與實(shí)時(shí)流處理框架Spark Streaming,能夠處理高并發(fā)、高吞吐率的車輛實(shí)時(shí)動(dòng)態(tài)數(shù)據(jù),高效運(yùn)用拓?fù)潢P(guān)系判斷算法,對(duì)車輛動(dòng)態(tài)進(jìn)行有效監(jiān)管。
(2)可擴(kuò)展性高。本文使用的Kafka消息系統(tǒng)、Spark Streaming實(shí)時(shí)流的數(shù)據(jù)處理框架,均采用分布式集群模式,在實(shí)際應(yīng)用中,面臨業(yè)務(wù)功能與規(guī)模的擴(kuò)展,只需按照當(dāng)前的集群設(shè)計(jì)模式擴(kuò)展并部署,可以減少項(xiàng)目前期的架構(gòu)設(shè)計(jì)與建設(shè)成本。
(3)應(yīng)用性強(qiáng)。經(jīng)處理的車輛動(dòng)態(tài)數(shù)據(jù)可動(dòng)態(tài)滿足數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析、數(shù)據(jù)共享的需求,應(yīng)用至車輛軌跡監(jiān)測(cè)、重點(diǎn)車輛安全風(fēng)險(xiǎn)預(yù)警、車流量預(yù)測(cè)等多種業(yè)務(wù)領(lǐng)域。
參考文獻(xiàn):
[1]Ranjan Rajiv.Streaming big data processing in datacenter clouds[J].IEEE Cloud Computing,2014,1(1):78-83.
[2]崔星燦,禹曉輝,劉 洋,等.分布式流處理技術(shù)綜述[J].計(jì)算機(jī)研究與發(fā)展,2015,52(2):318-332.
[3]沈敬偉.三維拓?fù)潢P(guān)系描述、計(jì)算和推理研究[D].南京:南京師范大學(xué),2011.
[4]李文林.數(shù)學(xué)史概論[M].北京:高等教育出版社,2011.
[5]孔令德.計(jì)算機(jī)圖形學(xué)[M].北京:清華大學(xué)出版社,2013.