張淑梅 李福興


摘要:針對城市交通產生大量的實時、連續數據處理的問題,提出采用Storm分布式實時計算框架解決該問題。系統采用Kafka軟件實時采集生產現場各類大量參數、發布-訂閱消息,經Storm的Trident應用軟件組件對大數據進行過濾、拆分、分組、函數、狀態更新、狀態查詢、重新分區等操作完成大數據計算;結合分布式遠程過程調用軟件(DRPC軟件)滿足并行查詢需求。經驗證,該設計可提高原系統計算速度、效率和吞吐量,降低開銷,確保數據安全。
關鍵詞:城市交通;大數據;分布式
中圖分類號:TP393 文獻標識碼:A 文章編號:1007-9416(2019)09-0126-03
0 引言
隨著各種交通信息采集技術例如傳感器技術、地理信息系統、GPS采集系統和計算機技術被廣泛地運用到城市交通路口,采集得到的交通數據呈爆發增長。經研究和分析發現,這些數據無論是類型、格式、長度各不相同,可分為結構化、非結構化及半結構化。本系統是建立在城市智慧交通物聯網、云計算平臺基礎上,構建基于分布式流式實時數據計算技術,建立城市智慧交通大數據計算系統。提高城市智慧交通系統響應速度,輔助城市交通智慧決策。
1 實時數據流式計算相關技術
1.1 常見大數據實時流式處理架構
在大數據實時流式處理領域,主流開源實時流式處理系統有Storm、Spark和Flink 3種。Storm工作時需要將任務設計為有向無環拓撲圖,將設計好的有向無環拓撲圖提交至系統集群,由系統集群主控節點分配任務給相應的工作節點執行任務。Spark是在處理前按時間戳預先將大數據分割為微批量數據流后進行批處理作業。Flink數據處理模式與Storm類似,但具有完善的窗口功能及窗口聚合等功能,并且會主動操作窗口狀態。為了及時掌握數據處理結果,流式處理系統都有數據處理狀態管理功能,但這3種系統的狀態管理模式不同,Storm將狀態管理滾動至應用層面或使用更高層面的抽象Trident[1]。Spark把狀態信息視作是一種微批量數據流,在處理數據時加載數據目前的狀態信息,該狀態信息通過利用Spark具有的函數操作獲得該數據處理結果,同時修改被加載過數據的狀態信息。Flink系統設有專門的數據狀態信息,Flink在內部存儲計算產生的中間結果,并供后續功能或算子計算結果使用。數據狀態信息可存在Flink堆內存或堆外內存,也可存儲介質在第三方介質中。
1.2 storm架構
Storm架構適用于處理無邊界的流式數據,其架構依賴Hadoop的Zookeeper。Storm系統將接收的數據直接在內存中進行計算,沒有數據傳輸和磁盤讀寫的延遲問題,滿足分布式流式實時計算對實時性要求高的需求。
Storm采用主從架構模式,其系統有主節點(Master)和工作節點( worker)之分。主節點為系統的中心,在其上運行后臺服務程序(Nimbus)、運行各種Storm命令,包括激活(active) 、使失效(Deactive)、再次平衡(rebalance)以及終止(kill)命令。工作節點(worker)上運行服務程序(Supervisor),工作節點也是Spout和Bolt執行處理邏輯的地方,通過Supervisor程序安排工作任務、下載作業副本。Supervisor監聽執行后臺服務程序提交的任務,并可對任務線程執行啟動、暫停和撤銷工作。一個或多個工作線程組成一個工作進程,工作線程由每個任務節點的實例組成,是Storm的最小單元。
Storm通過Zookeeper程序協調主節點和工作結點之間的通信。任何在主結點和工作結點之間的狀態都存放在Zookeeper里。一旦其中一個任務崩潰了,當恢復的時候,將從Zookeeper中讀取該任務之前的狀態,讓Storm結點任務恢復還原至崩潰以前的狀態。
1.3 Kafka消息系統
Kafka是一個分布式高吞吐量消息系統[2],它擁有高吞吐量、易擴展和透明的特點,非常適合處理為實現規模化、智能化、集群化生產而組成的物聯網大數據。
Kafka消息可靠性機制。當一個消息被發送后,發送端將等候服務器成功接收到消息的反饋(可通過參數控制等候時間),假如消息在傳輸途中丟失或是其中某個服務器死機,發送端則重新發送。服務器端記錄了補償值(offset),用于指向接收端下一個即將發送的信息,當接收端收到了消息,但卻在計算過程中宕機,此時接收端可以通過這個補償值重新找到上一個消息再進行處理。接收端還有權限控制這個補償值,對持久化到服務器端的消息做任意處理,提高了消息發送可靠性,降低數據丟失率。Kafka的數據轉發方案具有允許集群中的某一節點死機而不影響整個集群工作的特點,即在一個集群中,當備份數量為N下,并允許N-1個節點失敗。在所有這些節點中,其中有一個節點是頭節點,該節點存儲了其它備份節點列表,并維持各個備份間的狀體同步。基于Kafka的特點,本次選用Kafka程序。
2 城市智慧交通大數據處理需求分析
智能交通云平臺主要包含以下幾個方面:(1)基于大數據處理技術的交通信息數據共享中心,能夠對海量數據進行有效存儲和管理的城市智慧交通數據系統。(2)為方便公眾出行,對于出現大面積交通癱瘓的情況進行預測、避免擁堵的城市交通監測和預警系統。(3)可按時段和區域統計車輛污染的排放情況,為改善環境、促進綠色環保以及治理汽車尾氣的排放提供數據支持的交通污染監測系統。(4)可對交通數據進行分析,讓公交部門充分了解道路情況,適時調整公交運力,合理分配公交資源,方便公眾出行的公交管理系統。(5)城市智慧交通系統除人車路外,其智慧網絡主要由物聯網和其它設備組成,其中物聯網是系統的中樞神經系統。在過程中實時產生的大數據連續、數量相對比較大的特點,傳統的數據處理系統無法滿足這一需求,需要構建一套能實現實時數據分布式流式處理系統。
3 實時數據計算系統設計
3.1 系統架構設計
根據Storm系統的特點,系統采用結構化設計模式,其主要由實時數據采集、實時數據計算、數據存儲、實時數據分享和實時系統監控部分組成。(1)實時數據采集層可以根據數據來源、類型、大小、頻率進行預裝軟件,如Kafka軟件和Nginx軟件實現對這些數據的實時采集和預處理,其中Nginx軟件安裝在一臺服務器上,它將獲取的數據按照要求(如地點、時間等)進行日志分割并生成一定格式的日志文件,它是流式數據處理平臺數據的入口和預處理系統。(2)實時數據計算層是基于Storm 實時流式計算技術的高可靠大數據實時計算系統,實現對海量大數據的分布式、高容錯、高可靠實時的大數據進行計算,是整個Storm系統的核心部分。系統應用Storm系列組件進行任務拓撲設計、系統開發、進程編排、信息發布等。(3)數據存儲層是系統用于城市智慧交通運行過程中產生的各類數據存儲管理部分。在大數據分布式實時流式計算系統中,為了提高系統存取數據的速度,數據存儲根據數據應用背景分為內存存儲和硬盤存儲兩種模式。本次系統內存儲選Redis系統,磁盤存儲選用Hbase數據庫管理系統。(4)實時數據分享層是實時數據計算系統將大數據處理的結果對其它應用系統分享的接口。本系統基于高效的實時數據存儲子系統,采用統一的Web服務、遠程服務等服務方式為外部系統提供實時數據訪問接口。(5)實時數據處理監控實現對系統各部分的軟件和硬件運行狀態進行實時監控。實現對每個節點上的CPU、存儲(內外存)、網絡帶寬等參數進行實時監測;完成對系統接入部分的實時數據傳輸情況的實時監測;控制系統各計算節點計算任務均衡分配、計算任務的啟停等;可以對實時數據計算子系統和實時數據分析子系統等的數據存取和訪問進行實時監測,還能根據預先定義的報警規則發出狀態報警和預警。
3.2 城市智慧交通大數據處理
3.2.1 數據實時計算設計
數據實時計算是Storm系統的核心。Storm通過轉發數據功能,按類別聚類建立拓撲,不斷接受現場的數據,Storm通過主節點按事先設定的工作(worker)分配任務(Task),Spout和Bolt則按類處理大數據。
Spout接受傳輸層數據的輸入或從文件中讀入數據、監視新文件,文件一旦被修改,Spout會重新讀入數據并覆蓋之前的元組(tuple),是數據實時計算數據的入口,將接受的數據組成tuple(元組),將tuple發射給Bolt進行數據實時執行流式數據合并、連接、分組、聚合等操作,將操作結果再發送至下一個Bolt,直至數據處理完畢,實現城市智慧交通實時監控。
為了更進一步提升系統處理大數據的能力,在完成了將數據傳輸至kafka后,系統選用Trident topology進行分析計算,Trident是在storm基礎上,一個以實時流式計算為目標的高度抽象。它在提供處理大吞吐量數據能力的同時,具有高速分布式查詢和有狀態流式處理的能力。
3.2.2 建立一個Trident的spout
數據采集層完成接收系統實時數據,具體設計如下:創建一個新的數據流,名命為cm-spout,并且傳參數給kakfk的spout實例。將Trident topology轉換成一個storm的拓撲。分別指定cmhosts和kafka的topic(主題)名,cmhost用于配置連接kafka的Zookeeper,這個spout用于通過查詢的方式動態確定kafka的分區信息。經過這步已經建立了一個用于發射批量城市智慧交通系統運行的spout。
3.2.3 分割操作及創建每個字段的獨立數據流
將數據進行分割為小數據發布到系統集群的計算機中完成計算任務,分割將以時間戳、地點、設備名為關鍵詞進行分割,建立多個主題,用來管理不同時間、地點、設備所產生的數據。不同類別的數據記錄到其對應的主題池中,而這些進入到主題池中的數據會被Kafka寫入磁盤的日志文件中進行持久化處理,降低Storm對實時分析處理速度的要求,等Storm有空時再處理沒來及處理的數據,避免數據處理的遺漏。
3.3 實時報警
在按照數據字段名建立了新的流數據后,設計一個跟蹤函數,實現對各數據判斷是否在合適的范圍內,如果不在合適范圍內,則向XMPP發送報警信息和該數據并將該數據做永久保存處理。
3.4 并行查詢設計
通過以上設計,系統已可快速高效地處理城市智慧交通生產的大數據,但要通過查詢處理數據的結果,還需進一步完成查詢的設計。在設計時,將應用軟件、查詢和Storm隔離,它們之間只能通過外部方式來訪問,為了查詢拓撲以獲取所需的數據,將使用DRPC(分布式遠程過程調用)實現。DRPC是Storm中一套軟件,它接收用戶輸入,同時也作為DRPC Spout的輸入而存在。
在Storm的DRPC中,客戶端將向Storm的DRPC的服務器發出一個DRPC請求,服務器將把請求發送到相應Storm topology來協調請求和計算,并等待該拓撲的應答。一旦收到應答,它將把應答返回到請求客戶端,實現并行查詢,高效地查詢各項參數。
4 實驗分析
通過在學校機房選5臺PC機組建局網,安裝系統進行測試。所選軟件為Storm 0.10.0 released、Kafka2.11-0.10.0.1, Zookeeper3.4.9,Hbase1.0.3,Redis-3.2.3,PC機配置為:16G內存,intel 酷睿i7的CPU,1T磁盤。實驗部署架構,集群各個節點的配置和功能描述如表1所示。
4.1 系統可靠性測試
實驗采用運行數據包模擬每1秒產生1000條數據記錄。當數據源快速輸出時,計算的數據傳輸在“no-ack”(無應答)時的丟失率和采用“ack”(有應答)保障機制后的數據傳輸的丟失率。為確保準確性,采用5次數據的平均值。從表2可以看出,采用ack后,有效降低數據丟失率。
4.2 系統實時計算性能
由表3可知,系統實時計算總量和時間的關系,進而證明該系統具有很好的實時性和抗壓性。大數據實時流式分布式計算已在一些工業生產現場、電商平臺得到應用并顯現出良好的效果,這也從另一方面驗證了設計的可行性。
5 結語
本文研究以城市智慧交通系統為對象,在已有系統硬件信息化、智能化建設基礎上,使用實時流式數據計算系統的Storm技術,設計了城市智慧交通實時大數據的分析、計算、反饋與預警系統。(1)系統實施后,在城市智慧交通運行過程中,對其各項參數的實時自動采集、連續監測和快速分析,相關人員可以實時獲取城市智慧交通運行的信息及預警信息。系統采集到的基礎數據可以為后續的大數據分析、處理提供支持。(2)由于涉及到生產實踐問題,設計驗證僅在學校用模擬數據驗證,有待生產現場的驗證。(3)本文僅對城市智慧交通系統大數據處理進行了系統構建,還有待更進一步完善、不斷改善實施方案、優化系統算法及與應用系統更進一步融合,提高應用系統的運行速度和效率。
參考文獻
[1] 王潤華,毋建軍,侯佳路.分布式實時計算引擎——Storm研究[J].中國科技信息,2015(6):68-69.
[2] 程學旗,靳小龍,王元卓,等.大數據系統和分析技術綜述[J].軟件學報,2014,25(9):1889-1908.
[3] 朱偉,李紀云,江慧,劉柱云.基于分布式內存數據的數據同步設計與實現[J].現代電子技術,2014(37):77-79+83.
Abstract:To solve the problem of large amount of real-time and continuous data processing in urban traffic, a Storm distributed real-time computing framework is proposed to solve the problem. The system uses Kafka software to collect a large number of parameters and publish-subscribe messages on the production site in real time. Through the Trident application software component of Storm, large data are filtered, split, grouped, functions, status updates, status queries, re-partitioning and other operations to complete large data calculation.and combines distributed remote procedure call software (DRPC software) to meet the needs of parallel query. It has been proved that the design can improve the computing speed, efficiency and throughput of the original system, reduce the overhead and ensure data security.
Key words:urban transportation;Big data;distributed