趙佳欣,韓 鈺,石明翔,李 碩,白碩
(北京城市學院信息學部,北京 100074)
在新媒體時代,各式各樣的網絡內容呈現爆炸式增長的趨勢,互聯網的各類社交媒體平臺已成為公眾獲取信息、表達觀點的重要平臺,人們表達觀點的同時也增加了因網絡輿情內容引發的各種事件。傳統的網絡分析系統是利用復雜、高成本的硬件結合人力來實現的,存在一定的局限性和不穩定性,已經不能滿足實際需求。
隨著我國科學技術不斷發展進步,一些學者也曾嘗試利用大數據技術解決網絡輿情分析系統的海量數據實時處理需求,例如諶志華利用Hadoop技術進行數據處理,利用HDFS 進行數據存儲。但是Hadoop 主要是面向靜態數據的批處理,未能很好地解決復雜高速的實時處理和分析的問題[1]。因此,本文嘗試利用大數據架構Kappa、實時計算框架Flink、數據存儲Iceberg 及文本挖掘相關技術及算法,實現《基于Flink的網絡內容分析系統》。通過本系統可更加精準快速地分析海量網絡內容,幫助有關部門提高對網絡內容的監管效率,達到對網絡環境保護、凈化的目的,從而維護社會的和諧安定。
本系統使用Kappa 架構[2]搭建,系統由應用服務層、數據計算層、數據存儲層、數據清洗處理層和數據采集層構成,主要功能包括數據采集、數據清洗處理、文本挖掘、數據計算、數據多維分析及可視化展示,其系統架構如圖1所示。

圖1 系統架構
首先數據采集層會通過爬蟲的方式獲取數據并將其提供給Kafka,數據清洗處理層再按照順序依次對數據進行數據去重、數據清洗,之后將完成預處理的數據執行文本分詞、去停用詞、關鍵詞提取等文本挖掘流程,接著數據存儲層通過消息隊列Kafka 將數據保存至Iceberg,然后數據計算層利用Flink 并根據應用服務層實際需求進行實時計算和離線計算,離線計算的結果保存至Hbase。當應用服務層發送請求時,將實時和離線的計算結果分別發送至應用服務層。最后應用服務層將內容呈現給用戶。
數據采集層負責以微博網站為數據源采集數據,數據集包括100w條數據,數據項分別是網絡內容的鏈接、熱搜數、發布時間、轉發數、評論數、點贊數及發布者ID、名稱、關注數、粉絲數和歷史發布內容相關信息等內容。
數據清洗處理層是利用Flink 的在線流式處理。從Kafka 獲取到網絡爬蟲數據后,首先進行數據預處理,然后通過創建前綴字典樹構建有向無環圖的方式再結合動態規劃算法得到分詞結果[3],經過停用詞篩選后利用TF-IDF 算法抽取關鍵詞,并將其輸入到Kafka中。Flink清洗處理流程如圖2所示。

圖2 Flink清洗處理流程
當進行中文分詞計算任務時,首先需要建立前綴字典樹,它可根據字符串的公共前綴來減少查詢時間,最大限度地減少字符串比較[4]。然后構造出有向無環圖再依據n-gram 算法計算出最大概率路徑進而得到最終的分詞結果。在n-gram 算法中需計算出每句話的概率,設s 表示句子,由i 個詞序列w1,w2,w3...wi組成,所以句子的概率可通過公式⑴來計算,但由于計算過于復雜,通常采用公式⑵的方式來計算


在利用TF-IDF 算法提取關鍵詞的過程中,由于特定內容在篇幅長的文章里有更高的詞頻,為了防止偏向于篇幅長的網絡內容,在計算時會將詞頻歸一化[5]。可依據公式⑶、公式⑷、公式⑸來計算詞頻和逆文檔頻率,進而提取出關鍵詞。其中tfd,t表示詞語t 在語料庫d 中出現的頻率,nd,t表示詞語t 在語料庫d 中出現的次數,|D|代表語料庫中文件總數,dft表示包含詞語t的語料庫個數。
TF計算公式:

IDF計算公式:

數據存儲層負責按需向數據計算層提供數據。系統中擁有海量的數據,需要Kafka 作為消息隊列進行消息的緩沖,保證系統的高效性及穩定性[6]。除此之外,系統還包含多種業務模塊,數據湖Iceberg 作為保存數據的中間件,支持隱藏分區和分區進化的特性,便于數據寫入和業務數據分區策略更新。Flink 數據寫入Iceberg流程如圖3所示。

圖3 Flink數據寫入Iceberg流程
Iceberg 擁有ACID 的能力可以降低數據入庫到處理流程的延遲問題。它支持流任務和批任務使用相同的存儲模型,可更好實現Flink流批一體的特性。在數據計算層執行實時計算任務時,Iceberg 還支持流式讀取增量數據,可快速讀取到上游數據,保證當前任務的正常運行[7]。Flink 查詢Iceberg 數據流程如圖4所示。

圖4 Flink查詢Iceberg數據流程
數據計算層負責將數據從Iceberg 中抽取,然后進行數據分析計算,將得出的結果提供給應用服務接口。該層采用Flink進行高吞吐低延遲的計算,因其具有很好的抗壓能力[8]。當網絡爬蟲的數據不斷輸送到消息隊列中時,Flink 可按順序消費數據。由于Flink流批一體的特性,在具體實現時能做到精準快速地完成任務。本層的計算內容包括熱點計算、追蹤計算、類別計算、趨勢計算及用戶畫像計算。在進行數據計算時,分為實時的流處理計算和離線的批處理計算。實時流式計算負責統計本日的數據,離線批式計算負責統計本日之前的所有歷史數據,最后,將兩組計算結果匯總,返回給應用服務層[9]。具體每部分的Flink算子設計和計算流程如圖5所示。
應用層是系統前端部分,負責與用戶進行直接交互,可將用戶的請求發送至應用服務接口,待其處理后返回相應結果并展示。該層包括網絡內容的熱點分析、趨勢分析、類別分析、追蹤分析和用戶畫像等功能。
為了驗證系統的執行效率,本文集群環境采用3臺虛擬機,一個為主節點Master,兩個子節點Slave1、Slave2,虛擬機硬件配置均為16G 內存和512G 硬盤,使用的操作系統為Centos7 64 位。在實驗中,利用搭建好的集群處理不同量級的數據,并將其執行效率與Hadoop、Spark 執行效果進行對比,不同平臺執行效率如圖6所示。

圖6 平臺執行效率
實驗結果表明,在處理低量級數據時Hadoop平臺、Spark 平臺和Flink 平臺的執行效率沒有明顯的差別。但隨著數據量的增加,不同平臺的執行效率逐漸有了顯著差異。Hadoop平臺和Spark平臺的響應時間大幅增加導致執行效率變低[10],而Flink 平臺在處理大量數據時仍能做出快速響應。實驗結果證明本系統的執行效率隨著數據量的增大,依然能做到快速響應,表現出系統良好的執行效率。
本文依托于大數據架構Kappa,利用實時計算框架Flink、數據存儲Iceberg、消息隊列Kafka 及文本挖掘相關算法包括n-gram算法和TF-IDF算法,實現《基于Flink 的網絡內容分析系統》,用于對網絡內容進行實時分析。在系統實現過程中,本文重點解決了實時數據處理、Flink 流批一體任務執行、實時分析網絡內容等技術難題,并通過實驗結果的對比分析證明了系統無論是在運行效率還是可擴展性上都有著良好的表現。