Bolt flush模塊處理流程圖;
[0061] 圖7示出了本發明實施例三中一種網絡流量數據存儲系統的結構示意圖;
[0062] 圖8所示了本發明實施例四中一種網絡流量數據查詢裝置的結構示意圖。
【具體實施方式】
[0063]為了使本發明的技術方案及優點更加清楚明白,以下結合附圖對本發明的示例性 實施例進行進一步詳細的說明,顯然,所描述的實施例僅是本發明的一部分實施例,而不是 所有實施例的窮舉。并且在不沖突的情況下,本說明中的實施例及實施例中的特征可以互 相結合。
[0064] 針對現有技術的不足,本發明實施例一提出了一種網絡流量數據存儲方法,下面 進行說明:
[0065] 圖1示出本發明的物理架構圖,一種網絡流量數據存儲系統,該系統包含數據采集 集群、數據存儲與計算集群、數據實時處理集群、索引集群及應用服務器。其中,交換機為萬 兆交換機。除采集設備外,權衡性能與成本其余節點推薦全部復用。
[0066] 圖2示出了本發明實施例一,如圖所示,一種網絡流量數據存儲方法:
[0067]步驟201,采集網絡數據;
[0068]其中數據采集技術現如今已較為成熟,對于lGbps網絡環境使用libpcap網卡采集 即可保證數據丟包率小于千萬分之一,但對于lOGbps網絡流量,需要借助硬件分流、過濾、 會話重組、專用采集網卡等技術。
[0069]步驟202,將所述網絡數據存儲至分布式消息中間件Kafka;
[0070] 步驟203,采用流式計算框架Storm將所述Kafka中網絡流量數據進行拓撲處理;
[0071 ] 其中,持久化拓撲包括:第一中間件處理單元Kaf kaSpout、會話的處理單元 TransformBolt、分布式系統處理單元HdfsBolt、數據庫處理單元HBaseBolt。
[0072] Kafka中的網絡數據進行持久化拓撲是指,第一 KafkaSpout從所述Kafka獲取網絡 數據,解析數據包信息,并將網絡數據封裝成包結構體,并發送給TransformBolt。
[0073] 進一步包括,TransformBolt接收所述第一Kaf kaSpout提交的所述包結構體,并封 裝成會話結構體,會話結構體包括長會話結構體和短會話結構體。
[0074]進一步包括,將長會話結構體提交給HdfsBolt,短會話結構體提交給HBaseBolt; [0075]對網絡數據進行特征向量提取拓撲是指,第二中間件處理單元Kaf kaSpout從 Kafka獲取網絡數據,封裝成包結構體,并發送給特征向量的處理單元FeatureBolt,
[0076] 進一步包括:FeatureBo It接收所述第二Kaf kaSpout提交的所述包結構體,并通過 所述包結構體提取包內容的特征向量。
[0077] 步驟204,所述網絡數據存儲到分布式文件系統HDFS以及分布式鍵值型數據庫 HBase〇
[0078] HdfsBolt將長會話結構體寫入所述HDFS;HBaseBolt將短會話結構體寫入所述 HBase〇
[0079] Hdf sBo 11將所述特征向量寫入所述HDFS。
[0080] 步驟205,通過分布式批處理計算框架MapReduce對所述特征向量構建索引系統, 并與所述HDFS及所述HBase進行關聯;
[0081 ]步驟206,所述索引系統可以基于五元組按時間范圍進行檢索查詢,提供統一對外 服務接口以及進行數據統計分析。
[0082]其中,圖3示出了本實施例一中步驟202中關于數據接入與分布式消息中間件處理 流程圖,
[0083]其中數據采集設備采集數據,每臺采集設備采集的數據可以隨機存儲在分布式消 息中間件中,按特定采集策略相對均勻的存儲在分布式消息中間件中,Kafka接受采集設備 發布的網絡數據流并等待流式處理引擎的消息訂閱。本發明采用分布式消息系統采用 Kafka集群,Kafka提供可靠、高效的消息發布與訂閱服務,單點消息發布與訂閱的吞吐量不 小于2Gbps。
[0084] 采用流式處理框架Storm,Storm是一種高效、可靠、高可用的流式數據處理系統, 可通過定制處理拓撲實現數據的可靠處理。
[0085]圖4示出了本實施例一中步驟203中關于持久化處理拓撲圖,
[0086] 本實施例流式處理框架采用Storm,Storm是一種高效、可靠、高可用的流式數據處 理系統,可通過定制處理拓撲實現數據的可靠處理。
[0087]持久化拓撲由 Spout、Bolt及用于連接 Spout->Bolt、Bolt_>Bolt 間的Grouping (圖中中心位置的4個箭頭)組成。
[0088] KafkaSpout負責從Kafka讀取數據,解析網絡數據包的基本信息,并封裝成包結構 體提交,可直接基于現有KafkaSpout框架實現;
[0089] TransformBolt負責接收KafkaSpout提交的包結構體,按照一定的策略封裝成會 話結構體并提交,其中長會話提交給HdfsBolt,短會話提交給HBaseBolt。
[0090] 并且基于現有HdfsBolt框架,HdfsBolt負責將接收的長會話寫入HDFS,
[0091 ] 基于現有HBaseBolt框架,HBaseBolt負責將接收的短會話寫入HBase。
[0092] 圖5示出了本實施例一中步驟203中TransformBolt具體流式處理流程圖,
[0093] PacketRecord為原始報文記錄、SessionCache用于緩存報文組成的會話并合并新 的報文。該框架的具體流程:
[0094] Prepare:任務開始時執行,僅加載配置、啟動定時器Timer;
[0095] Execute:訂閱到每條報文執行,報文五元組作為Key,按Key相同的合并入會話緩 存,當緩存達到一定閾值時,強制進行flush操作;具體操作步驟:
[0096] 步驟501,Tuple檢查并獲取PacketRecord,;
[0097] 步驟502,提取 PacketRecord 的 Sessionld,
[0098] 步驟503,將 SessionCaches 加鎖,
[0099] 步驟504,判斷SessionCaches 是否存在 Sessionld,
[0100] 如果SessionCaches存在Sessionld,則到步驟 506獲取SessionCaches 中 key 為 Sessionld的SessionCache;
[0101 ] 如果SessionCaches不存在Sessionld,則到步驟505首先根據PacketRecord創建 SessionCache 寫入 SessionCaches,再到步驟506 獲取 SessionCaches 中 key 為Session Id 的 SessionCache;
[0102] 步驟507,將 PacketRecorcUtuple 合并入 SessionCache;
[0103] 步驟508,判斷SessionCache緩存的tuple是否超過閾值;
[0104] 如果緩存超過閾值,
[0105] 則執行步驟509,提交Session;
[0106] 步驟510,答復SessionCache的tuples(ack);
[0107] 步驟 511,SessionCaches 移除 Session;
[0108] 執行步驟512,判斷5688;[01103(31168緩存的1:即16是否超過閾值;
[0109] 如果步驟508,判斷SessionCache緩存的tuple不超過,貝丨】直接執行步驟512;
[0110] 如果判斷SessionCaches緩存的tuple超過閾值,則執行步驟513,強制執行flush 操作,之后執行步驟514,釋放SessionCaches鎖;
[0111 ] 如果判斷Sess ionCaches緩存的tuple不超過閾值,貝lj執行步驟514,釋放 SessionCaches 鎖。
[0112] Clean Up:拓撲結束時執行,注銷定時器,強制執行flush操作。
[0113] 圖6示出了本實施例一中步驟203中TransformBolt flush模塊處理流程圖,
[0114] 步驟601,更新last Flush時間;
[0115] 步驟602, SessionCaches 加鎖;
[0116] 步驟603,遍歷Session緩存;
[0117] 步驟605是否滿足提交條件:1、強制flush,2、Session持續時間過長
[0118] 3、Session 包數過多;
[0119] 滿足條件時執行步驟606,提交Session;
[0120] 步驟607,提交 Session;
[0121 ]步驟609: Sess ionCaches 移除 Sess ion;再次執行步驟603;
[0122] 當步驟603不滿足步驟605中的提交條件時,執行步驟604,釋放Sess ionCaches鎖; 結束本次流程。
[0123] 當定時器判斷last Flush與當前時間過近時,結束本次任務,如果不過近時,則執 行flush操作。
[0124] Flush操作將緩存中滿足條件的數據根據一定的