劉輝 陳剛
(徐工集團工程機械股份有限公司科技分公司 江蘇省徐州市 221000)
工業生產過程中會產生海量的數據,隨著工業信息化的不斷發展和應用,這些數據的格式、來源和內容逐漸多樣化,數據決策的要求也日趨實時化、自動化,對數據存儲、數據管理和實時計算等方面提出了新要求[1]。
傳統的工業大數據分析系統一般采用基于Hadoop 技術體系的離線數據倉庫架構[2],通過離線導入數據源,再根據具體的業務需求針對最近一段時間的歷史數據進行統計分析。這種模式無法針對系統數據的實時性變化進行分析探查,為了實現對工業項目監控中實時指標的計算,可以在離線數據倉庫架構的基礎上增加實時計算,通過消息隊列等形式進行數據流處理,即Lambda 架構[3]。Lambda架構滿足了實時指標分析的需求,但需要同時開發離線計算、實時計算兩套代碼,不僅提高了開發難度,還帶來了多套引擎的維護成本。
為解決這一問題,Kappa 架構[4]將離線批處理作為一種特殊的實時流處理,實現兩套體系的融合。Flink[5]作為批流一體化計算引擎,能夠很好地支撐Kappa 架構,目前已廣泛應用于實時數據分析場景。為此,本文基于Flink 構建工業大數據實時分析平臺,對工業生產過程中產生的海量數據進行實時采集、處理、分析與存儲,面向不同格式的數據進行定制化存儲,從而提供實時化、自動化的分析決策,支撐監測大屏、看板系統、報表系統、分析報警系統等多種場景的實時數據分析。

圖1:Flink 技術框架圖

圖2:系統總體架構圖
Apache Flink[5]是一個框架和分布式處理引擎,用于對無界和有界數據流進行有狀態計算。如圖1 所示為Flink 技術框架圖,Flink 中有兩個核心API:用于處理有界數據流的DataSet API(即批處理)和用于處理無界數據流的DataStream API(即實時流處理)。Flink 的核心是DistributedStreaming Dataflow 引擎,它用來執行Dataflow 程序,也是流式處理世界觀的具體實現,DataSetAPI和DataStreamAPI 都可以通過該引擎創建運行時程序。在此基礎上,Flink 還提供了用于機器學習的組件庫FlinkML、用于圖處理的組件Gelly 和用于結構化查詢SQL (Structured Query Language, SQL)操作的Table API。Flink 會對Table API 邏輯在執行前進行優化,從而可以對SQL 或Table 查詢進行效率上的優化。在運行部署方面,Flink不僅支持在本地的Java 虛擬機JVM (Java Virtual Machine, JVM)環境中直接運行,還可基于Cloud 端部署、以及基于Hadoop 的集群進行Standalone 模式或YARN (Yet Another Resource Negotiator, YARN)模式的部署。
數據倉庫[6]是一個面向主題的(Subject Oriented)、集成的(Integrate)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的數據集合,用于支持管理決策。然而,隨著數據時效性在企業運營中的重要性日益凸現,傳統的離線數據倉庫架構難以滿足數據實時分析需求,同時Lambda 架構存在開發效率低、維護成本高等瓶頸,因此基于Flink 等引擎、Kappa 架構實現的實時數據倉庫已成為數據倉庫應用的新趨勢[7-9]。

圖3:實時數據倉庫模型結構圖

圖4:實時分析平臺看板系統

圖5:實時分析平臺報表系統
基于分布式實時計算架構的生產設備數據分析平臺總體架構共包括:數據采集層、數據存儲層、資源管理層、數據計算層和應用層。
如圖2 所示為平臺系統架構圖。
平臺數據主要源于工業制造場景中應用的綜合自動化系統、PLC、傳感器、維修點檢數據等。數據通過采集系統基于工業以太網進行傳輸。
平臺利用分布式存儲架構根據數據場景及應用需求進行個性化存儲,通過Hive、HBase、HDFS、Redis、RDBMS 等存儲模型,為結構化數據、半結構化數據、實時數據等不同類型的數據提供存儲支持。
基于Kafka 消息隊列及Flink 實時計算引擎,針對所采集的數據進行數據清洗、數據解析、分析計算,并將計算結果如設備數據、生產數據、故障數據、設備狀態等信息寫入相應的存儲結構中。
操作人員可通過Web 界面進行交互,實現對設備實時監控、觀察報警統計數據,同時支持狀態在線分析、設備能耗分析等功能。
實時數據倉庫采用批流一體的Flink 引擎作為實時計算框架,通過分層的方式建立數據模型,包括:貼源數據層(ODS, Operation Data Store)、明細數據層(DWD, Data Warehouse Details)及數據服務層(DWS, Data Warehouse Service),具體如圖3 所示。
3.1.1 貼源數據層
利用Kafka 可以實現對實時數據的傳輸,達到高并發、低延遲和消峰的效果。因此,基于Kafka 構建分布式消息隊列,對如:設備狀態、操作日志等需要實時處理的原始數據進行采集,實現貼源數據層。
3.1.2 明細數據層
針對所采集的原始數據進行數據清洗、多表聯接、維度信息關聯等操作,將數據處理為實時明細數據。對于這部分數據,根據需求一部分將其寫入到HBase 中便于實時查詢,另一部分仍通過Kafka 消息隊列傳輸到數據服務層進行后續處理。
3.1.3 數據服務層
根據數據分析場景將Kafka 消息隊列接收到的數據進行輕度匯總和高度匯總兩條分支處理,輕度匯總層面向OLAP 查詢,便于進行指標聚合和報表分析;高度匯總層將數據寫入HBase,能夠向實時監測大屏等提供快速查詢。
以性能稼動率這一實時指標為例介紹實現過程:首先,原始數據通過采集設備、工業以太網傳輸到平臺Kafka 消息隊列;進而進入明細數據層,基于FlinkSQL 進行數據的解析、清洗、關聯維表等操作;然后,分別計算該設備在一定時間內的有效運行時長和開機時長,相除得到性能稼動率并導入HBase,實時監測大屏系統及報表查詢系統可以進行指標的查詢并展示。
平臺首先基于Hadoop 體系、2 個主節點和4 個計算節點構建大數據集群,包括:HDFS、Yarn、HBase、Hive 等平臺組件,此外還部署Zookeeper、Kafka、Flink 等計算組件。
分布式節點硬件配置選用4 核2.7GHzCPU、24GB 內存、1TB硬盤,選用CentOS764 位系統,同時部署組件版本為JDK1.8、Hadoop2.6.0 及Flink1.9.0。
基于Flink 的工業大數據實時分析平臺能夠支撐看板系統、報表系統、分析報警系統等多種場景的實時數據分析需求,如圖4 所示為系統看板中心。
如圖5 所示為系統性能稼動率報表,可根據篩選條件進行快速查詢并生成圖表展示。
本文針對工業大數據實時分析的需求,基于批流一體計算引擎Flink 設計工業大數據實時分析平臺,對工業生產過程中產生的海量數據進行實時采集、處理、分析與存儲,面向不同格式的數據進行定制化存儲,從而提供實時化、自動化的分析決策,支撐監測大屏、看板系統、報表系統、分析報警系統等多種場景的實時數據分析。