田闖+張萍
[摘 要]企業常常面對大量分布分散的終端設備數據,這些數據在傳輸到數據處理服務器的過程中,以流數據的方式向上匯聚。為了能夠快速處理流數據,本文設計基于Esper的插件化流數據處理框架,以提高工作效率。
[關鍵詞]流數據;Esper;插件化
doi:10.3969/j.issn.1673 - 0194.2017.12.077
[中圖分類號]TP391.44;TN929.5 [文獻標識碼]A [文章編號]1673-0194(2017)12-0-02
1 研究背景
流數據的特點是數據持續到達,且速度快、規模宏大、格式各異。目前,在進行外場感知設備的數據采集處理時,通常要同時對接不同的外場感知設備。由于不同的感知設備其通信協議不同,甚至差別較大,而傳統的做法一般都是針對不同的外場感知設備的數據采集,通常進行專門的開發。
本文對外場感知設備的數據采集技術進行了分析與研究,并基于Esper設計實現了一個能夠適用于多協議流數據處理平臺SCP(Stream Computer Platform)。
2 外場感知數據采集
2.1 流數據
近三十多年來,數據庫技術發展迅速且得到了廣泛應用。一方面,數據建模形式多樣,從層次數據庫、網狀數據庫、關系數據庫、對象數據庫到關系對象數據庫等;另一方面,數據規模也越來越大。傳統數據庫技術的一個共同點是:數據存儲在介質中,可以多次利用;用戶提交數據操縱語言(Data Manipulation Language,DML)來獲取查詢結果。盡管傳統數據庫獲得了較大的成功,但是在20世紀末,一種新的應用模型卻對它提出了挑戰。一種名為流數據(Streaming Data)的應用模型廣泛出現在眾多領域,例如金融應用、網絡監視、通信數據管理、Web應用、傳感器網絡數據處理等。
令t表示任一時間戳,at表示在該時間戳到達的數據,流數據可以表示成{…,at-1,at,at+1,…}。區別于傳統應用模型,流數據模型具有以下4點共性:①數據實時到達;②數據到達次序獨立,不受應用系統所控制;③數據規模宏大且不能預知其最大值;④數據一經處理,除非特意保存,否則不能被再次取出處理,或者再次提取數據。
2.2 外場感知設備數據采集中的關鍵問題
外場感知數據的數據量大、設備分散、各自同時向上匯聚數據的特點帶來了一些采集的特殊問題。本部分分析了感知設備的配置管理問題,對于大量異構數據的匯聚,給出了兩步走的分層設計,以解決大并發情況下異構數據的采集。并對采集到的異構數據進行解析,給出了一個可擴展的插件式的處理框架,以解析采集到的異構數據。
2.2.1 流數據的并發傳輸
外場感知數據由于設備較多,數據匯聚點也較多,且互相之間沒有必然聯系,各自獨立上傳,這導致前置機要同時接受多個甚至大量的鏈接。即便前置機可以處理多個鏈接,也不能同時將數據進行分類和處理,因為這會導致前置機壓力過大,影響數據的時效性和完整性。所以,為了能夠同時處理大量來自不同匯聚點的異構數據,本文給出兩步走的解決方法。第一步,前置機的功能弱化,只接收同構數據,這能降低前置機的通信復雜性,同時將異構數據的處理放到第二步中。第二步將構建基于Esper的數據匯聚總線,Esper總線將接收前置機的數據,不進行任何處理,只是簡單地將不同結構的數據放置到不同的模塊隊列中。這樣,來自外場感知的異構數據就最終被放到了不同的模塊隊列中,同時可以保證大數據量的實時處理。流數據的并發傳輸如圖1所示。
2.2.2 多規約數據的解析
以往的流數據處理框架通常將數據的解析和傳輸在一起實現,對于多種外場感知數據需要單獨實現一套采集程序,不能很好地進行復用。由于本文使用了Esper總線,將數據分發到不同模塊的消息隊列中,所以多規約的數據解析就在各規約數據的模塊隊列中完成了解析。為了能夠對不同規約的數據進行解析,這里只需要實現不同規約對應的解析模塊,在程序啟動時加載到SCP即可。對于不同的模塊隊列,分別啟動一個或多個消費線程,消費線程調用解析模塊,有針對性地將來自不同外場感知設備的數據,解析為同一種統一的格式放入目標隊列中,或者單獨投遞到指定的目的地(文件、數據庫、MQ等)。
3 基于Esper的多協議流數據處理平臺的設計及實現
在文中關鍵問題分析的基礎上,筆者基于Esper復雜事件處理引擎設計并實現了涵蓋異構設備、實時外場感知數據匯聚、大規模并發傳輸的流數據處理平臺SCP。其系統框架如圖2所示。主要模塊包括:前置機、Esper總線、感知隊列、消費解碼線程、目標隊列、存儲系統、配置庫、配置文件以及守護進程等。
圖2中各個功能模塊的說明:
(1)前置機:前置機通過讀取配置庫中與本前置機相關的配置,從而確定與哪些通信端通信,以及通信的具體方式等。
(2)Esper總線:負責接收以事件形式包裝的、來自各個前置機的外場原始數據,并根據事件的類型分發到不同的感知隊列中。
(3)感知隊列:盛放未經解碼的異構數據,每個感知隊列盛放一種類型的感知數據。
(4)消費解碼線程:消費解碼線程使用以插件的形式加載到系統中的解碼模塊,一種消費線程負責從感知隊列中取出數據,調用解碼模塊進行解碼,將統一格式的數據放入目標隊列中。
(5)目標隊列:對于異構數據,系統將最終提供一個統一的數據格式來存儲異構數據,異構數據可能只是目標隊列中數據對象的子屬性。這樣目標隊列就可以盛放各種外場感知數據。如果感知數據是完全不同格式的數據,比如有些外場感知數據是文件,有些是圖片。感知數據經過消費線程解碼后,可以直接跳過目標隊列,直接進入存儲系統。
(6)存儲系統:系統最終存放數據的地方。其可以是文件、數據庫、外部消息隊列服務等。
(7)配置庫:提供系統啟動需要的各種配置信息。
(8)配置文件:提供一些適合存放在文件中的配置信息,比如本機IP、端口等用于定位前置機本身的信息。
(9)守護進程:用于在系統出現異常退出等不在正常運行狀態時重啟SCP。
4 結 語
在能源和交通等領域,企業信息化日益發展,企業常常面對大量分布分散的終端設備數據,這些數據在傳輸到數據處理服務器的過程中,以流數據的方式向上匯聚。基于流數據的特點,本文為了能夠快速處理流數據,設計了基于Esper的插件化流數據處理框架。該框架可以適應不同領域數據格式異構的問題,可以處理多數據源,同時可以向數據處理服務器匯聚數據。
主要參考文獻
[1]亓開元,趙卓峰,房俊,等.針對高速數據流的大規模數據實時處理方法[J].計算機學報,2012(3).
[2]孫大為,張廣艷,鄭緯民.大數據流式計算:關鍵技術及系統實例[J].軟件學報,2014(4).