韋統(tǒng)邊 吳江波 蘇德 張亮 韋通明
【摘? 要】隨著各行業(yè)業(yè)務(wù)系統(tǒng)的復(fù)雜化和大數(shù)據(jù)時代的來臨,企業(yè)對數(shù)據(jù)實時性的要求也越來越高。本文著重分析數(shù)據(jù)實時的重要性,不同實時預(yù)警功能系統(tǒng)的技術(shù)對比,結(jié)合企業(yè)業(yè)務(wù)確認架構(gòu)設(shè)計和實現(xiàn)方式,主要對采取基于Flink流處理框架對實時預(yù)警功能系統(tǒng)的實現(xiàn)展開敘述和總結(jié)。
【關(guān)鍵詞】大數(shù)據(jù);架構(gòu);實時;Flink;預(yù)警
中圖分類號:U463.6? ? 文獻標志碼:A? ? 文章編號:1003-8639( 2023 )08-0049-02
Implementation of Real-time Warning Function Based on Flink
WEI Tong-bian,WU Jiang-bo,SU De,ZHANG Liang,WEI Tong-ming
(SAIC GM Wuling Automobile Co.,Ltd .,Guangxi Laboratory of New Energy Automobile,
Guangxi Key Laboratory of Automobile Four New Features,Liuzhou 545007,China)
【Abstract】With the complexity of business systems in various industries and the advent of the era of big data,enterprises have higher and higher requirements for real-time data. This paper focuses on the importance of real-time data,the technical comparison of different real-time early warning function systems,combined with the design and implementation of enterprise business confirmation architecture,and mainly describes and summarizes the implementation of real-time early warning function system based on Flink flow processing framework.
【Key words】big data;framework;real time;Flink;early warning
隨著步入大數(shù)據(jù)時代和各個行業(yè)業(yè)務(wù)系統(tǒng)的復(fù)雜化,面臨海量數(shù)據(jù)的分析計算,同樣,數(shù)據(jù)的采集處理和存儲如何及時預(yù)警信息也具有巨大的挑戰(zhàn)。比如在汽車行業(yè),數(shù)據(jù)由之前的離線分析逐步轉(zhuǎn)為實時分析,在一些場景下,數(shù)據(jù)的實時分析更能夠增加用戶的體驗感,提高數(shù)據(jù)的價值和減少風(fēng)險的發(fā)生。為了全面提高用戶體驗以及系統(tǒng)的預(yù)測性,建立實時的預(yù)警功能系統(tǒng)是十分有必要的。
1? 預(yù)警實現(xiàn)方案介紹
基于大數(shù)據(jù)技術(shù)的廣泛使用,特別是目前比較流行的分布式框架和實時計算框架,如Flink[1]、Spark[2]計算平臺逐步完善,目前多數(shù)企業(yè)采用的是Kafka和Flink技術(shù)來開發(fā)實時預(yù)警系統(tǒng)。Flink實現(xiàn)上傳數(shù)據(jù)處理,提升數(shù)據(jù)處理速度,提高告警的及時性,但是有些傳統(tǒng)的告警系統(tǒng)卻不好修改版本代碼。
結(jié)合主流的預(yù)警系統(tǒng)實現(xiàn)技術(shù),大概分為4種方案:一是基于Flink實現(xiàn)預(yù)警,數(shù)據(jù)的上傳方式是傳統(tǒng)的,F(xiàn)link流計算框架對數(shù)據(jù)進行處理分析,得到中間結(jié)果,然后與原先設(shè)定好的閾值比較,符合條件則發(fā)送告警信息;二是基于Flink SQL語法實現(xiàn)配置的動態(tài)更新,顯示在可視化的實時系統(tǒng)中,但是結(jié)合預(yù)警功能比較難開發(fā);三是使用Kafka作為消息中間件,F(xiàn)link消費不同的主題topic以及對數(shù)據(jù)進行處理和過濾,并將結(jié)果寫入Redis[3],Prometheus讀取Redis數(shù)據(jù),Grafana基于Prometheus實現(xiàn)圖表的展示;四是基于Flink CEP實現(xiàn)預(yù)警功能系統(tǒng)開發(fā)。
預(yù)警功能系統(tǒng)一般包含日志采集、解析聚合、監(jiān)控和預(yù)警。日志采集指的是將日志和指標統(tǒng)一化、集中化地收集;解析聚合是使用Flink作業(yè)解析聚合平臺所有的作業(yè)指標數(shù)據(jù),展示給用戶以及下游業(yè)務(wù)使用;監(jiān)控和預(yù)警,對于聚合完成了的指標,做預(yù)警規(guī)則的配置。大致流程圖如圖1所示。
本文采用Canal、Kafka、Flink、Flink SQL、Redis、Grafana、Prometheus技術(shù)結(jié)合來實現(xiàn)預(yù)警功能系統(tǒng)的開發(fā),實現(xiàn)靈活配置和動態(tài)更新。基本的實現(xiàn)思路是利用Canal采集原始數(shù)據(jù),通過自定義程序?qū)?shù)據(jù)放置在Kafka中的指定主題,Kafka作為消息中間件也作為Flink的數(shù)據(jù)源,F(xiàn)link消費數(shù)據(jù)后通過數(shù)據(jù)的清洗過濾得到了初級的告警數(shù)據(jù),然后結(jié)合指標通過二次過濾得到詳細的告警數(shù)據(jù)并放置在Redis中,Prometheus結(jié)合告警數(shù)據(jù)發(fā)送到不同應(yīng)用上,其中,Grafana為告警系統(tǒng)提供管理控制平臺,便于告警信息的查詢和統(tǒng)計。
2? 預(yù)警功能系統(tǒng)的技術(shù)棧
2.1? Canal
Canal主要用途是基于MySQL數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱和消費,其工作原理如圖2所示。
Canal的工作原理就是把自己偽裝成MySQL slave,模擬MySQL slave的交互協(xié)議向MySQL Mater發(fā)送dump協(xié)議,MySQL Mater收到Canal發(fā)送過來的dump請求,開始推送binary log給Canal,然后Canal解析binary log,再發(fā)送到存儲目的地,比如MySQL、Kafka、Elastic Search等。
Canal優(yōu)勢是對業(yè)務(wù)代碼沒有入侵,數(shù)據(jù)的同步也能做到準實時,可以實現(xiàn)與數(shù)據(jù)源一對多的關(guān)系,擁有web管理頁面,重要的是具備集群高可用特性,生產(chǎn)環(huán)境一般是Canal采集數(shù)據(jù)后將數(shù)據(jù)發(fā)送到消息隊列Kafka的topic中。
2.2? Kafka
Apache Kafka最初是由LinkedIn研發(fā)的一個分布式的發(fā)布-訂閱消息系統(tǒng)[4-5],為處理實時數(shù)據(jù)提供一個統(tǒng)一、高吞吐、低等待的平臺。
Kafka是一個分布式系統(tǒng),由通過高性能TCP網(wǎng)絡(luò)協(xié)議進行通信的服務(wù)器和客戶端組成,可部署在內(nèi)部以及云環(huán)境中的裸機硬件、虛擬機和容器上。Kafka集群可以在一個指定的時間內(nèi)保存所有發(fā)布上來的消息,當超過指定的時間后消息就會被系統(tǒng)丟棄以釋放空間。Kafka的性能不會受數(shù)據(jù)量大小的影響,因此可以保存大量的數(shù)據(jù)。
Kafka適用的場景有日志收集,后通過統(tǒng)一接口方式提供給消費者;作為消息系統(tǒng),將生產(chǎn)者和消費者進行代碼解耦;結(jié)合Flink做流式處理,實時場景的實現(xiàn)。
2.3? Flink和Flink SQL
Flink是一個針對流數(shù)據(jù)和批數(shù)據(jù)的分布式處理引擎[6-9],適用場景主要是流數(shù)據(jù)處理,會把所有任務(wù)當作流來處理。因此,F(xiàn)link可以提供數(shù)據(jù)處理的通用方案,使得由相同或相關(guān)的組件和API搭建框架的處理需求得以簡化。同時,F(xiàn)link可以支持本地快速迭代,可以定制化內(nèi)存管理。所以,F(xiàn)link的特點是處理大數(shù)據(jù)速度快,能滿足大數(shù)據(jù)背景下應(yīng)用實時計算平臺的需求。Flink是一個真正的流式處理,其可以按照元組逐個分發(fā)數(shù)據(jù),做到對數(shù)據(jù)的單條處理,而不需要再流處理匯總執(zhí)行計算。其支持大規(guī)模計算能力,能夠在數(shù)千個節(jié)點上并發(fā)運行,具有強大的吞吐量和延遲特性,提供了數(shù)據(jù)分布、數(shù)據(jù)通信以及容錯機制等功能。同時,F(xiàn)link提供多種靈活的窗口函數(shù)及更高抽象層的API,使開發(fā)者可以更便捷地編寫分布式任務(wù)。
Flink SQL是面向用戶的API層[10],是降低用戶使用實時計算門檻而設(shè)計的一套符合標準SQL語義的開發(fā)語言,開發(fā)者可以直接在代碼中書寫SQL實現(xiàn)一些查詢操作。Flink的SQL支持基本查詢語法,常見的算子包括SELECT、WHERE、DISTINCT、GROUP BY、UNION、UNION ALL、JOIN等。同時,F(xiàn)link SQL提供大量的內(nèi)置函數(shù),常見的內(nèi)置函數(shù)包括比較函數(shù)、邏輯函數(shù)、算術(shù)函數(shù)、字符串處理函數(shù)、時間函數(shù),也支持使用者自定義函數(shù)實現(xiàn)其他計算。Flink實現(xiàn)了SQL標準的Apache Calcite(Apache開源SQL解析工具),語法易讀易書寫,開發(fā)者只需關(guān)注業(yè)務(wù)邏輯。而且Flink內(nèi)置很多優(yōu)化規(guī)則,簡化了研發(fā)的復(fù)雜度,通過SQL能在高層應(yīng)用上實現(xiàn)真正的批流一體。
2.4? Redis
Redis是一款完全開源且高性能的key-value數(shù)據(jù)庫,基于內(nèi)存的數(shù)據(jù)庫,速度快,而且支持數(shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。
Redis具有性能極高、數(shù)據(jù)類型豐富、原子性、特性豐富、單線程等特點,適用于數(shù)據(jù)的高并發(fā)讀寫、海量數(shù)據(jù)的讀寫等場景。
2.5? Grafana
Grafana是用于可視化大型測量數(shù)據(jù)的開源程序,提供了強大和優(yōu)雅的方式去創(chuàng)建、共享、瀏覽數(shù)據(jù)。dashboard中顯示了不同metric數(shù)據(jù)源中的數(shù)據(jù)一般是配合時序數(shù)據(jù)庫做數(shù)據(jù)展示的,支持的數(shù)據(jù)源有:Graphite、InfluxDB、OpenTSDB、Prometheus、Elasticsearch、CloudWatch、Zabbix等。Grafana與Zabbix、Prometheus有一定的技術(shù)差異,在于Grafana主要功能是展示數(shù)據(jù),并不能用于監(jiān)控預(yù)警,因此,Grafana需要結(jié)合Zabbix、Prometheus等工具一起使用,以實現(xiàn)整個數(shù)據(jù)的預(yù)警、顯示功能。
2.6? Prometheus
Prometheus是一套開源的系統(tǒng)監(jiān)控報警框架。它受啟發(fā)于Google的Brogmon監(jiān)控系統(tǒng),由工作在SoundCloud的前Google員工在2012年創(chuàng)建,作為社區(qū)開源項目進行開發(fā),并于2015年正式發(fā)布。Grafana是數(shù)據(jù)可視化工具,也可以做數(shù)據(jù)監(jiān)控和數(shù)據(jù)統(tǒng)計,帶有告警功能,流程如圖3所示。圖中,F(xiàn)link App:需要監(jiān)控的數(shù)據(jù)來源;Prometheus:收集數(shù)據(jù);Pushgateway:Prometheus生態(tài)中的組件,Pushgateway服務(wù)收集Flink的指標;Grafana:進行可視化展示。
3? 預(yù)警系統(tǒng)的整體設(shè)計和實現(xiàn)
為了滿足預(yù)警的實時更新、不同數(shù)據(jù)源的讀取,大數(shù)據(jù)監(jiān)控預(yù)警系統(tǒng)在文中采用的方案是:Canal+Kafka+Flink+Flink SQL+Redis+Grafana+Prometheus。該系統(tǒng)由數(shù)據(jù)采集模塊、數(shù)據(jù)存儲模塊、數(shù)據(jù)處理模塊、預(yù)警推送模塊、管理平臺模塊5大模塊組成。
數(shù)據(jù)采集模塊通過高可用的Canal日志采集工具對mysql中的原始數(shù)據(jù)進行采集,將數(shù)據(jù)進行業(yè)務(wù)邏輯清洗,整理所需字段,放置到消息存儲中間件Kafka的主題中。
數(shù)據(jù)處理模塊作為預(yù)警系統(tǒng)的核心,F(xiàn)link從消息中間件Kafka讀取數(shù)據(jù),從Redis中讀取Flink SQL過濾數(shù)據(jù),將數(shù)據(jù)存入Redis,同時根據(jù)閾值條件判斷是否達到預(yù)警條件。
預(yù)警推送模塊將預(yù)警數(shù)據(jù)結(jié)合預(yù)警消息模版生成的可讀性預(yù)警信息,通過調(diào)用應(yīng)用API將預(yù)警信息發(fā)送到該應(yīng)用系統(tǒng)中。
數(shù)據(jù)存儲模塊用于將推送的消息進行存儲至Redis,便于后期歷史預(yù)警信息的查詢、分析統(tǒng)計,也是Grafana管理頁面所展示的數(shù)據(jù)來源。
管理平臺模塊用于管理數(shù)據(jù)處理模塊腳本、預(yù)警推送模塊推送的歷史信息。
4? 結(jié)語
本文提出的基于Canal+Kafka+Flink+Flink SQL+Grafana+Prometheus實現(xiàn)預(yù)警功能的系統(tǒng)開發(fā),解決了預(yù)警信息的靈活配置和及時發(fā)送等問題。Canal能夠?qū)崿F(xiàn)數(shù)據(jù)快速且完整的采集,Kafka能夠?qū)崿F(xiàn)高吞吐、低延遲的功能,F(xiàn)link能夠?qū)崿F(xiàn)億單位級別的實時處理,F(xiàn)link SQL能夠?qū)崿F(xiàn)減少預(yù)警消息變更和代碼的耦合度,Prometheus能夠?qū)崿F(xiàn)預(yù)警消息的推送,再結(jié)合Grafana的展示,滿足了預(yù)警功能系統(tǒng)的業(yè)務(wù)需求,增強了系統(tǒng)的預(yù)警能力,保證了預(yù)警的及時性,提升了平臺的運行效率。
參考文獻:
[1] MIKA P. Flink:semantic web technology for the extraction and analysis of social networks[J]. Journal of Web Semantics,2005,3(2):211-223.
[2] ZAHARIA M,CHOWDHURY M,F(xiàn)RANKLIN M J,et al. Spark:cluster computing with working sets[C]//Proceedings of the 2nd USENIX conference on hot topics in cloud compu-ting. Boston,MA:[s.n.],2010.
[3] 張俊,廖雪花,余旭玲,等. 關(guān)系型數(shù)據(jù)庫內(nèi)存化存儲模型研究[J]. 計算機工程與應(yīng)用,2021,57(19):123-128.
[4] 吳璨,王小寧,肖海力,等. 分布式消息系統(tǒng)研究綜述[J]. 計算機工程與應(yīng)用,2019,46(6A):1-5,34.
[5] 徐晶,許煒. 消息中間件綜述[J]. 計算機工程與應(yīng)用,2005,31(16):73-76.
[6] 李梓楊,于炯,卞琛,等. 基于負載感知的數(shù)據(jù)流動態(tài)負載均衡策略[J]. 計算機應(yīng)用,2017,37(10):2760-2766,2772.
[7] 代明竹,高嵩峰. 基于Hadoop、Spark及Flink大規(guī)模數(shù)據(jù)分析的性能評價[J]. 中國電子科學(xué)研究院學(xué)報,2028,13(2):149-155.
[8] 李梓楊,于炯,卞琛,等. 基于流網(wǎng)絡(luò)的Flink平臺彈性資源調(diào)度策略[J]. 通信學(xué)報,2019,40(8):85-101.
[9] 汪志峰,趙宇海,王國仁. 異構(gòu)Flink集群中負載均衡算法研究與實現(xiàn)[J]. 南京大學(xué)學(xué)報(自然科學(xué)),2021,57(1):110-120.
[10] 王玉真. 基于Flink的實時計算平臺的設(shè)計與實現(xiàn)[D]. 南昌:南昌大學(xué),2020.
(編輯? 楊? 景)
作者簡介
韋統(tǒng)邊(1991—),男,工程師,研究方向為大數(shù)據(jù)開發(fā)。