王性國 郝文靜 董建 謝康 杜佳穎



摘要:隨著大數據應用的深入,如何提高大數據應用的時效性,成為大數據工作中的關鍵。針對實時海量數據預警處置的問題,設計了一種基于流數據處理的預警系統,系統包含了數據預處理、預警規則設置、預警數據識別、預警數據存儲等模塊,系統中關鍵組件包括了分布式消息系統Kafka、分布式流式計算框架Storm。預警規則支持關鍵詞匹配或正則表達式匹配兩種方式。系統可廣泛應用于實時性要求較高的各類預警處置系統。
關鍵詞:流數據;預警規則;kafka;storm;預警系統
中圖分類號:TP302.1 文獻標識碼:A
文章編號:1009-3044(2019)30-0069-05
1背景
隨著信息技術的快速發展,不僅是互聯網、移動互聯網的數據正以指數級別的增長,其他社會各行業數據也呈現了高速增長的趨勢,因此如何快速、有效的從海量數據中提煉出更有價值的信息成為大數據應用的關鍵。特別是在面向復雜業務需求,如智能分析、現場決策、個性化體驗改進等業務場景時,對數據處理的實效性提出了更好的要求,大數據技術的戰略意義不在于掌握龐大的數據信息,而是在于如何通過有效的處理方式將這些大量的數據進行有效的專業化處理。流式數據處理也正是基于這種場景誕生的,與以往數據處理方式不同,流計算是連續的、實時的、低延時的,因此流式數據處理特別適用于那些數據產生速度快、數據量大,同時需要對關鍵信息進行及時報警的業務場景。
傳統的預警處置系統大多是對已經存儲后的數據進行離線計算,常見的如基于機器學習模型進行預測或者是基于規則的判斷模型,此類預警系統事先需要對數據進行清洗、入庫,然后在此基礎上進行離線計算,進而產生預警結果。此類預警系統在預警前需要做大量的清洗、入庫、計算等相關工作,因此時效性相對較低,尤其是面向海量數時,本身數據存儲已經占用了大量的時間及存儲空間,同時基于海量數據的離線計算也需要消耗大量的時間。因此,在面向海量的更新速度較快的流數據時,傳統的預警系統已經無法滿足實際業務需要。基于此,本文設計了一種基于流式數據處理的預警系統,系統以當下最流行的Storm流計算框架、Kafka消息處理系統為基礎,并結合HDFS、MongoDB分布式存儲系統進行設計。系統設計的功能包括流數據的預處理、預警規則的配置、預警數據的識別、預警結果處置等功能。
2系統架構
由圖1所示,系統邏輯框架分為四層,存儲層、支撐層、服務層和用戶層。
用戶層給出系統主要角色,角色分為三種,分別為預警規則設置人員、預警結果處置人員及系統管理人員。其中預警規則設置人員負責設置相關的預警規則,具體包括熟悉數據字段含義、制定具體預警對比規則、檢驗規則是否正確、規則下發、規則維護等;預警結果處置人員負責對預警產生的數據進行人工校驗,對結果數據進行分析,具體工作包括,校驗預警結果的正確性,并對校驗結果進行標注,根據不同干的業務場景,對于預警正確的數據進行處置;系統管理人員負責對系統中用戶、角色和權限資源的信息進行維護和分配,也可以對數據庫進行備份。
應用服務層給出系統主要功能模塊,包括用戶系統管理模塊、預警規則設置模塊、人工校驗處置模塊、規則管理模塊、預警結果查詢、預警結果綜合分析及系統管理等6個模塊。應用服務層通過開放相應的服務接口,提供對前端功能的支持。
技術支撐層給出系統開發過程中使用的相關工具,具體包括分布式、多副本的消息系統kafka、分布式存儲系統HDFS、分布式應用程序協調服務框架Zookeeper、分布式流式數據處理框架storm。以上組件均按照分布式集群方式進行部署,以及對原始數據處理應用程序及基于流式數據的在線識別算法。
數據存儲層給出系統中用到的數據,主要包括原始數據存儲、中間結果數據、用戶信息、預警規則及預警結果等存儲。根據不同的數據形態,數據分別存儲在HDFS、MongoDB、KafkaAz。
3系統工作流程
本系統的邏輯流程圖如圖2所示。由圖可知,本系統的邏輯流程主要分為以下幾個步驟:1)數據預處理(包括原始數據處理、數據寫人kafka);2)預警規則設置;3)storm預警數據識別(包括storm數據處理、在線識別);4)預警結果(包括預警結果存儲、預警結果處置、預警結果分析)等4個步驟。
3.1數據預處理
包括原始數據的采集,存儲及數據清洗等相關工作。在這里數據采集與數據的預處理進行解耦,數據采集專注數據的獲取與存儲,數據預處理專注對獲取的原始數據進行清洗。通過數據預處理,將原始數據轉化為ison格式數據,并寫人到kafka消息系統中。
3.2預警規則設置
根據元數據格式,設置不同的預警規則,實現對預處理后的流式數據得在線識別,并將命中規則的數據進行保存。預警規則支持基于字段的and,or等邏輯組合操作,支持自定義的正則表達式規則,支持多條子規則添加等多種預警方式。通過界面化的操作支持用戶將預警規則在線填寫并進行保存,同時提供對規則的查詢、編輯、啟動、停止等操作。
3.3storm預警數據識別
用戶將設置好的預警規則進行下發,storm將根據收到的預警規則,進行任務分配。任務分配完畢后,storm啟動任務對kafka中的消息進行實時處理,最終將命中規則數據推送給后臺進行存儲。
3.4預警結果
步驟3)中命中的數據存儲在相應的數據庫后,前端頁面對預警結果數據進行展示,根據業務需要,預警結果處置人員首先判斷預警信息的真偽,并根絕判斷結果該數據進行標注f正確或者錯誤)。對于預警錯誤的數據,標注后數據會同步給預警規則設置人員,輔助其對規則進行優化;對于預警正確的數據,根據不同的業務場景,數據將分發給不同的業務人員進行處置。同時,管理人員可以根據預警結果以及可視化的展示等方式,對預警數據進行綜合分析,以達到對全局業務的整體把控,提升管理和工作效率。
4系統功能設計
按照功能詳細劃分,基于流數據處理的預警系統的主要功能點包括:數據預處理、預警規則配置、預警數據識別、預警結果分析、數據存儲、系統管理等6個部分。
4.1數據預處理
數據預處理模塊主要包含了兩個部分,分別是原始數據處理和數據寫入kafka消息系統。
原始數據處理環節包含了兩個環節:
1)數據的實時獲取
獲取途徑包括遠端服務器實時數據推送以及通過布控方式獲取所需要的特定數據。
2)數據處理寫入kafka
Kafka數據處理流程如下圖所示:
相關定義:
Broker:Kafka集群包含一個或多個服務器,這種服務器被稱為broker。
Topic:在向Kafka集群發布消息的過程中,每條消息都會對應一個名為Topic的類別。物理上屬于不同主題消息會被單獨存儲,邏輯上同一主題消息可能存儲在一個或多個Broker上,但用戶只需指定消息的主題即可生產或使用數據,而無需關心數據的存儲位置。
Partition:Partition是物理上的概念,每個Topic包含一個或多個Partition。
Producer:數據生產者,負責將消息發布到Kaika。
Consumer:消息消費者,向Kafka broker讀取消息的客戶端。
Consumer Group:每個Consumer屬于一個特定的ConsumerGroup(可為每個Consumer指定group name,若不指定groupname則屬于默認的group。
數據處理流程如下:
1)實時接收遠端服務器推送進來的數據,或者是通過布控方式從其他系統獲取的特定數據并緩存至本地。
2)啟動掃描工作線程,輪詢步驟1)中獲取的緩存數據資源,將緩存的數據資源以流的形式分發到N個工作目錄。
3)啟動N個線程對步驟2)各個目錄的數據進行預處理,將數據清洗處理后生成特定格式。
4)啟動katka數據處理程序,創建Topic,將處理后的數據以消息的形式發布到kafka broker。Kafka集群包含多個消息代理服務器,由于每條消息都對應相應的Topic,因此可以使用不同的Topic來代表不同來源的數據。
5)消費者(consumer)通過kafka broker獲取數據進行數據處理,一個主題的數據可以有多個消費者(Consumer),一個消費者也可以同時訂閱多個主題的數據。當生產者發布消息到某個主題時,訂閱了這個主題的消費者都可以接收到生成者寫入的新消息。
6)重復步驟1)一步驟5)將獲取的數據通過kafka以消息流的信息實時提供給后端的消費者進行計算。
4.2預警規則
預警規則模塊包含的主要功能為預警規則的配置及規則的管理,預警規則的配置主要是通過storm的任務接口進行開發設計,將storm數據處理算法進行接口封裝,通過與前端頁面的互動,使得用戶可以通過前端頁面將預警算法相關參數進行配置。預警規則管理包括對規則的檢索、編輯、刪除、修改、啟用、停用等。通過前端頁面可以實時對預警任務進行啟動或者停止。具體功能流程,如圖5所示。
預警規則配置:每條預警規則描述了對不同類型和來源的數據進行預警。通過多條子規則的組合來描述一條規則,每條子則規則定義如何對一個字段進行匹配。子規則有相應的強度,強度為與表示數據必須匹配這條子規則,而強度為或的子規則只需匹配一條即可。配置預警規則時,首先需要完成整條規則的設置,包括指定規則用途和數據源,命中模式和是否對外發送。之后便可通過內容匹配,正則匹配,以及時間匹配對原始數據的各個字段制定不同的過濾子規則,同時也需為每個子規則設置相應的匹配強度。
具體實現流程如下:
1)新建預警任務,填寫任務名稱及任務描述;
2)選擇需要預警的數據源,在數據預處理環節,數據在寫人katka的過程中,需要對不同的類型的數據進行標識,增加來源標識字段;
3)配置預警規則,首先選擇需要設置規則的字段,其次選擇預警規則類型,類型主要包括基于內容匹配(and,or操作)和基于正則表達式的匹配兩種方式;
4)重復步驟3),添加子規則;
5)執行預警規則。
4.3預警數據識別
預警數據識別模塊主要是通過Storm來實現,在實際應用中,Storm一般采用集群化部署,Storm集群是由一個Master節點和多個Work節點組成,其中Master節點也被稱為主節點,Work節點也稱為工作節點。
Master節點運行名為Nimbus的后臺程序,主要作用是在Storm集群內分發代碼、同時為Work節點分配任務并監控任務的執行狀態m。
Worker節點運行一個名為Supervisor的守護程序,它負責監視主節點分配的任務,即根據Nimbus分配的任務確定是啟動還是停止工作進程。一個Worker節點上可以同時運行多個Worker進程。
Storm使用Zookeeper來作為分布式協調組件,同時作為元數據存儲,負責Nimbus和多個Supervisor之間的所有協調工作。
預警數據識別具體實現流程如下:
1)提交Topology,即用戶提交3.2節中設置的預警規則至Storm的Nimbus節點;
2)Nimbus節點將步驟1)中的任務進行切分,分成若干個Task,并將這些Task分配到不同的Supervisor,任務分配完畢后,將分配信息存儲在Zookeeper中;
3)Supervisor節點讀取Zookeeper上的任務信息,認領各自的任務,并將任務分配給所屬的Task進行執行;
4)將步驟3)中的各任務執行的結果存儲在數據庫中。
4.4預警結果
預警結果模塊主要提供了對預警結果的查詢、處置及分析相關的功能。具體功能如下:
1)檢索功能
在檢索頁面支持通過以業務方向方向、關鍵詞、時間等維度對結果進行查詢,并且對于錯誤信息提供編輯修改及刪除功能,支持數據的批量導出、批量刪除等操作。
2)預警結果處置
對于預警結果數據用戶可以在此進行人工校驗,校驗正確的數據,標記為“正確”并自動保存,對于預警識別錯誤數據,標記為“錯誤”并自動保存。對于標記“正確”的數據,可以根據報警信息進行處置,對于識別錯誤信息,反饋給規則設置人員,用來提升識別方法的準確度。如在互聯網違法網站預警識別中,可以將識別出來的違法網站及時通報并報相關機構進行及時處置。
3)預警結果分析
預警結果分析模塊提供對預警數據可視化展示、統計分析等相關功能。通過統計分析,可以對高發的預警信息進行總結,輔助相關工作人員進行問題的發現及整改。如在互聯網違法網站識別中,可以通過可視化的方式展示不同預警規則識別的準確率,幫助規則設置人員優化預警規則;通過預警結果的分析,可以對不同的類型的違法網站數量、活躍度進行整體摸排,對違法網站的用戶訪問的地域、時間等進行分析輔助相關機關對違法信息進行處置。
4.5數據存儲設計
結構化存儲的數據包括:原始數據、kafka流數據、用戶信息、預警規則信息及預警結果。其中原始數據以文件的形式存儲在磁盤上,通過程序實現自動處理。
1)預警結果存儲
通過預警規則命中的數據,將通過storm實寫入到后臺數據庫,預警結果數據采用mongdb進行存儲
預警結果是指通過預警規則在流式數據中命中的數據,以違法網站預警結果為例,數據庫的字段設置如表1所示:
2)用戶信息
用戶信息用戶存儲用戶基本信息,數據存儲在mongdb中,字段設置如表2所示。
3)預警規則
預警規則表用于存儲預警規則,數據存儲在mongdb數據庫中,字段設置如表3所示:
4)流數據存儲
流數據以消息的形式存儲在kafka中,Kafka中的消息是以主題(Topic)為基本單位進行組織的,各個主題之間相互獨立。在這里主題只是一個邏輯上的抽象概念,而在實際數據文件的存儲中,Kafka中的消息存儲在物理上是以一個或多個分區(Partition)構成,每個分區對應本地磁盤上的一個文件夾,分區數量可以在創建主題時指定,也可以在創建Topic后進行修改。
4.6系統管理設計
瀏覽器客戶端通過Chrome瀏覽器對系統進行訪問,具有權限的用戶可以進行系統管理的操作,在該模塊中,操作一方面可以進行用戶管理、權限分配管理,三個功能管理模塊與數據庫交互完成相應操作;另一方面還可以進行數據備份操作,可以手動備份數據,可以設置自動備份,也可以進行數據庫的清除。
系統管理模塊中,首先系統操作人員登錄到系統,然后選擇操作類型,包括三種,分別為用戶管理、權限分配管理和數據庫備份操作,在用戶管理中可以進行用戶的添加、編輯和刪除操作;在權限分配管理中,可以為一個角色分配其相應的功能頁面;數據庫備份中有三種備份操作可以執行,分別為數據手動備份、自動備份和數據庫清除操作。
5結束語
隨著大數據深入發展,數據的維度更多,來源更廣,數據產生的速度越來越快,因此如何更好地利用大數據,提高大數據的時效性,成為大數據工作中重中之中。本文結合實際應用情況,提出了一種基于流式數據預警系統的設計方案,系統設計之初主要是應用于公安部門對用戶訪問違法網站的實時報警處置,系統統還可廣泛應用于對時效性要求較高的業務場景,如應急處置系統、公安重點人員布控、安防等領域。在未來的研究中,將進一步加深對大數據流數據在預警處置中的理論及應用研究,并將結合具體業務場景,將本設計應用到實際業務中。