周維 曹揚 謝紅韜 胡建



收稿日期:2023-08-17
基金項目:國家自然科學基金(U19B2027)
DOI:10.19850/j.cnki.2096-4706.2024.06.007
摘? 要:當今,數據的規模和復雜性不斷增加,對數據處理平臺的要求也越來越高。傳統的批處理和實時處理技術各有優缺點,很難滿足大規模數據處理的需求。因此,流批一體化的數據處理平臺應運而生。文章在討論流批一體核心架構設計的基礎上,提出一種基于有狀態實時流的流批一體數據處理方法,并通過平臺化的方式實現流批一體數據的處理與計算。該平臺先后在四川高速集團、貴陽政府單位示范應用,應用結果表明平臺不僅統一了批處理和流處理框架,而且具有高效、可靠、可擴展等優點,同時能夠滿足大規模數據處理的需求。該平臺的實現對于提高數據處理效率和準確性具有重要意義。
關鍵詞:批處理;有狀態實時流;平臺化;流批一體
中圖分類號:TP311.1? 文獻標識碼:A? 文章編號:2096-4706(2024)06-0029-06
Design and Research of a Flow Batch Integration Data Processing Platform
Based on Stateful Real-time Flow
ZHOU Wei1, 2, CAO Yang1, 2, XIE Hongtao1, 2, HU Jian1, 2
(1.CETC Big Data Research Institute Co., Ltd., Guiyang? 550081, China; 2.National Engineering Research Center for Big Data Application Technology to Improve Government Governance, Guiyang? 550081, China)
Abstract: Today, the scale and complexity of data are constantly increasing, and the requirements for data processing platforms are also increasing. Traditional batch processing and real-time processing technologies have their own advantages and disadvantages, making it difficult to meet the needs of large-scale data processing. Therefore, a data processing platform that integrates flow processing and batch processing has emerged. On the basis of discussing the core architecture design of flow batch integration, this paper proposes a data processing method for flow batch integration based on stateful real-time flow, and implements the processing and calculation of flow batch integration data through a platform based approach. This platform has been demonstrated application in Sichuan Expressway Group and Guiyang government units. The application results show that the platform not only unifies batch processing and flow processing frameworks, but also has the advantages of efficiency, reliability, scalability, and can meet the needs of large-scale data processing. The implementation of this platform is of great significance for improving data processing efficiency and accuracy.
Keywords: batch processing; stateful real-time flow; platformization; flow batch integration
0? 引? 言
數據為數字經濟的發展提供了不可或缺的動力支持,一是數據量井噴式增長。根據國際數據公司(IDC)預測,2025年全球數據量將達到163 ZB。隨著數據量指數級增長,數據分析算法和技術迭代更新,數據管理與治理手段升級,數據創新應用和產業優化升級,數據對社會變革的影響更加深遠。二是數據產業規模持續擴張。據IDC預測,2019—2023年全球大數據市場相關收益將實現13.1%的復合年均增長率,2023年總收益將達到3 126.7億美元。三是數據技術產品不斷創新發展。當前數據底層技術框架日趨成熟,數據技術產品不斷分層細化,覆蓋數據存儲、計算、分析、集成、管理、運維等各個方面的技術有了長足的進步。以大數據和數據技術為基礎發展起來的云計算、物聯網、人工智能、區塊鏈等新技術對社會發展產生顛覆影響,同時,這些新技術的發展也促使流批一體數據處理技術的需求日益增加[1]。一是云計算技術的普及,越來越多的企業將數據處理任務轉移到云端,使得流批一體數據處理技術的需求不斷增加[2]。二是物聯網設備的廣泛應用,海量的實時數據不斷涌現,需要流批一體數據處理技術來實時處理這些數據。三是人工智能和機器學習技術的發展,越來越多的企業需要處理實時數據來支持這些技術的應用。
隨著智慧城市[3]、電子政務的發展,以及物聯網、人工智能、邊緣計算等技術的演進,傳統批數據的處理架構難以滿足企事業單位的需求,分開搭建批數據和流數據的架構造成運維、學習成本陡增[4]。因此有必要從性能、安全容錯、便捷使用等方面對流批一體的數據處理架構展開調研、分析與研究,孵化出流批一體化的數據處理新模式與數據處理新技術,新技術不僅可以提供低延遲的實時數據處理能力,而且能提供高效的批處理能力,從而能滿足新技術領域帶來的應用需求。
1? 平臺設計
1.1? 平臺架構設計
以Spark [5,6]為代表的批處理框架和以Flink [7]為代表的流處理框架,兩者各有特點,現實生產中既有批處理任務又有流處理任務,如果同時維護這兩套處理框架,就會造成以下問題:一是需同時維護兩套計算架構,造成大量管理成本和資源浪費;二是兩套計算架構的處理代碼并不統一,需維護兩套加工代碼;三是兩套并行的架構容易導致數據處理結果不一致[8]。本文平臺架構設計過程中,均采用Flink作為計算處理框架,進而來實現流批一體的數據處理[9]。
1.1.1? 系統架構
系統架構圖主要將流批一體數據處理平臺分為4個部分:數據源管理、數據處理、集群管理、數據資源池,如圖1所示。
圖1? 流批一體數據處理平臺系統架構圖
數據源管理:數據源管理能將各類不同的數據源接入進系統并進行統一管理,數據源的接入可以獲取到數據源的元數據以及Flink的元數據,這些元數據為數據處理過程中提供連接參數。
數據處理:數據處理分為實時數據處理任務和離線數據處理任務。實時數據處理任務直接將任務提交到Flink集群;離線數據處理任務是任務調度工具根據配置的調度模板信息,即調度時間,進行任務執行,其中重要的是任務調度工具的實現,調度工具中只需要模擬Flink的任務執行即可完成離線數據任務的處理。數據處理中最關鍵的設計是統一了實時數據處理和離線數據處理的統一表達,即實現了同一套FlinkSQL代碼能兼容處理流數據和批數據的問題。
集群管理:提交Flink任務時,首先要保證安裝了Flink集群,其中Flink當前支持的集群模式包括Standalone集群、Yarn集群、Kubernetes集群;其次,Flink集群是利用Flink中的執行器來處理提交過來的任務。
數據資源池:數據資源池是數據統一集中管理的位置,將數據分為主題應用數據、實時數倉等部分。經過Flink任務處理之后,處理的數據就能寫入到數據資源池中的數據表或其他數據系統中。
另外,流批一體數據處理平臺中處理后的數據,可為其他外部系統中的數據采集環節提供離線數據采集和實時數據采集的支撐,同時也可以為數據湖中的數據預處理、清洗加工、挖掘分析提供離線和實時的數據加工任務執行引擎。
1.1.2? 技術架構
流批一體數據處理平臺技術架構包含4層,如圖2所示。
圖2? 流批一體數據處理平臺技術架構圖
前端采用Vue作為開發框架,開發B/S架構的軟件系統,Vue不僅易于上手,還便于與第三方庫或既有項目整合。
服務端使用基于Java的Spring Boot框架進行開發,它基于Spring 4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot通過集成大量的框架使得依賴包的版本沖突,以及引用的不穩定性等問題得到了很好的解決。流批一體數據處理平臺需要對數據加工處理任務進行周期調度和實時調度,此處需要突破的關鍵技術是實現XXL-JOB任務調度引擎與Flink結合,進而實現流任務和批任務的定時調度。
流批一體數據處理平臺的任務執行都通過Flink Client向Flink集群提交任務。
流批一體數據處理平臺理論上是與Flink完全解耦的,因此流批一體數據處理平臺需要通過可配置的方式接入Flink集群,需要實現對原生Flink、CDH、HDP等不同Flink的接入。
1.1.3? 功能架構
流批一體數據處理平臺功能架構包括作業管理、集群管理、函數管理、連接器管理等主要模塊,功能架構圖如圖3所示。其中作業管理是整個系統的核心,提供SQL、JAR包、圖形組件三種作業開發模式,方便不同層次的數據開發工程師使用。為滿足不同數據規模、資源條件的應用場景,支持Local、Standalone、Session、Yarn四種模式的作業提交方式。
1.2? 平臺功能設計
基于有狀態實時流的流批一體數據處理平臺以“框架統一、處理高效、操作便捷”為指導思想,構建滿足于流批一體的數據計算的需求。系統分為9個部分:數據源管理、連接器管理、函數管理、集群管理、執行器管理、調度模板管理、任務管理、作業管理、運維中心。其功能概述如下:
1)數據源管理。將需進行數據處理的外部數據源進行統一接入和管理,通過數據列表將數據源進行分門別類,方便進行查詢和檢索。數據源類型支持關系型數據庫(MySQL、ClickHouse)、消息中間件Kafka、緩存數據庫Redis、非關系型數據庫MongoDB等數據源的接入。所有外部數據源的密碼進行加密存儲,保證數據安全。數據源管理功能如表1所示。
2)連接器管理。Flink Connector是Flink與外部系統集成和連接的橋梁,流批一體數據處理平臺作為一個共性的、應用工具軟件,需要滿足不同場景的數據庫適配需求。連接器管理提供對Flink Connector的統一管理功能,包括Flink Connector的上傳到本地和上傳到集群的功能等。連接器管理功能如表2所示。
3)函數管理。函數管理是任務開發工作的基礎,旨在建立統一的Flink函數管理入口,方便FlinkSQL任務開發時調用,其中函數類型包括比較函數、邏輯函數、字符串函數、Streaming、Batch等。具體功能如表3所示。
表1? 數據源管理功能項
功能項名稱 功能項描述
數據源列表 支持數據源目錄的新增、刪除、修改、查詢,支持數據源和數據源目錄的綁定,支持按照數據源目錄篩選數據源列表
關系型
數據庫 支持MySQL、ClickHouse數據源的新增、刪除、修改、查詢和連接、心跳檢測、Flink連接配置
非關系型
數據庫 支持MongoDB數據庫的接入的新增、刪除、修改、查詢和連接、心跳檢測、Flink連接配置
消息中間件 支持Kafka數據庫的接入的新增、刪除、修改、查詢和連接、心跳檢測、Flink連接配置
緩存數據庫 支持Redis數據源的新增、刪除、修改、查詢和連接、心跳檢測、Flink連接配置
表2? 連接器管理功能項
功能項名稱 功能項描述
官方連接器管理 支持連接器的新增、刪除、修改、查詢,同步
自定義連接器管理 支持連接器的新增、刪除、修改、查詢,下載、同步
表3? 函數管理功能項
功能項名稱 功能項描述
函數管理 支持函數的新增、刪除、修改和查詢、啟用、調用
4)集群管理。集群管理也是任務開發工作的基
礎,建立統一的集群管理界面,方便FlinkSQL或FlinkJar任務開發時,能選擇任務的提交集群,集群管理包括Flink集群管理和Hadoop集群管理,其中Flink集群又可以分為Standalone、Yarn Session、Yarn Per-job、Yarn Application等。集群管理功能如表4所示。
表4? 集群管理功能項
功能項名稱 功能項描述
Flink集群
管理 支持集群的新增、刪除、修改和查詢、啟用、調用、心跳檢測、回收功能;支持跳轉到Flink集群的Dashboard界面
Hadoop集群管理 支持集群的新增、刪除、修改和查詢、測試;支持指定Hadoop集群的配置文件路徑和Flink集群的配置文件路徑以及Flink Lib包路徑
5)執行器管理。執行器是批處理任務執行和調度的工具,批處理任務提交后,任務會提交給執行器去處理。執行器管理的主要功能是提供執行器的注冊,便于執行器的統一管理。執行器管理功能如表5所示。
表5? 執行器管理功能項
功能項名稱 功能項描述
執行器管理 支持執行器的新增、刪除、修改和查詢;支持執行器的自動注冊和手動錄入
6)調度模板管理。調度模板是批處理任務的調度配置信息,便于執行器按照調度配置信息去執行任務,另外,調度模板的管理也方便多個任務同時使用同一個調度模板信息,這樣就不會每一個任務都需要配置調度信息。調度模板管理提供執行器路由策略、阻塞處理策略、調度周期等參數配置。調度模板管理功能如表6所示。
表6? 調度模板管理功能項
功能項名稱 功能項描述
調度模板管理 支持調度模板的新增、刪除、修改和查詢;支持注冊節點、下次觸發時間查詢;支持執行器選擇
調度周期管理 支持分鐘、小時、天、周、月等調度周期
7)任務管理。任務管理是編排流批一體任務的管理界面,為滿足數據規模大、實時性高、數據類型多樣的數據處理要求,流批一體數據處理平臺需要具備實時計算和批計算兩種功能,且需要具備定時調度的功能。具體功能如表7所示。
8)作業管理。作業管理是流批一體數據處理平臺的核心功能。作業管理是流批一體作業的開發、執行、部署等操作進行管理;作業開發包括FlinkSQL、Flink圖形化組件、Flink Jar開發三種模式;作業執行包括作業發布、作業提交到集群、作業停止、作業恢復等操作功能;作業部署是將作業提交到集群進行執行,作業的執行模式包括Local、Standalone、Session、YarnApplication等模式。具體功能如表8所示。
表7? 任務管理功能項
功能項名稱 功能項描述
周期任務管理 支持周期任務的新增、刪除、修改和查詢,支持多種數據類型的數據處理
周期任務編排 支持周期任務拖拽式任務編排
周期任務調度 周期處理任務支持周期性調度和手動執行,支持分鐘、小時、天、周、月等調度周期
周期任務啟動 支持周期任務按照任務調度配置調度執行任務
周期任務停止 支持周期任務按照任務停止執行
周期任務執行一次 支持周期任務手動執行一次操作
實時任務管理 支持實時流計算任務的新增、刪除、修改和查詢,支持實時計算引擎
實時任務編排 支持實時流計算拖拽式任務編排
實時任務啟動 支持實時任務啟動執行
實時任務停止 支持周期任務停止執行
表8? 作業管理功能項
功能項名稱 功能項描述
作業開發 支持保存SQL、語法檢測、調試、會話、元數據獲取、數據源獲取、環境配置、作業配置、執行配置功能
作業執行 支持執行當前SQL、異步提交、發布、上線、下線功能
作業部署 支持不同模式的作業部署,包括Local、Standalone、Session、YarnApplication
作業日志 支持查看Flink啟動日志和執行日志的查看
Jar管理 支持Flink jar包的上傳、下載、刪除功能
9)運維中心。運維中心提供任務操作與狀態等多方位的運維能力。當開發完成并提交和發布至集群后,即可在運維中心對任務進行運維操作,包括作業實例運行詳情查看、作業任務的關鍵指標查看、集群信息、作業快照、異常信息、作業日志、自動調優、配置信息、FlinkSQL、數據地圖、即席查詢、歷史版本、告警記錄。具體功能如表9所示。
表9? 運維中心功能項
功能項名稱 功能項描述
作業實例 支持查看Flink作業實例狀態
作業總覽 支持查看Flink作業的各監控指標,包括作業狀態、重啟次數等指標
集群信息 支持查看集群實例信息
作業快照 支持查看 該任務的CheckPoint SavePoint,并且可以基于某一個CheckPoint/SavePoint重啟該任務
異常信息 支持查看Flink作業啟動及運行時的異常
歷史版本 支持對比查看Flink作業發布后的多個版本
告警記錄 支持查看Flink作業提交和發布后的告警信息
一鍵上下線 支持已發布的作業進行一鍵上下線操作
1.3? 平臺關鍵設計和關鍵技術
1.3.1? 關鍵設計
1)批數據和流數據的統一表達和查詢設計。針對企業數字化轉型建設過程中對離線數據和實時數據的融合處理需求,將業務數據化,數據算子化,設計可復制、可擴展的UDF算子和連接器,通過引入動態表概念,把離線表、動態流都表達為表,設計了批處理和流處理在操作對象表達方式上的統一,保證對流式數據查詢的連續性。同時,支持對流式計算的撤銷操作,避免相同鍵值的數據參與多次計算,實現在流批一體數據處理過程中對持續增長和持續輸出的流數據的正確操作。形成一套將任意標準的SQL轉化成實時計算程序的技術方案,采用SQL作為統一的編程語言,通過可視化的人機交互式方式,完整的使用SQL語義來表達流計算任務,達到對批數據和流數據的查詢使用同一套SQL語句的目的,實現批流一體計算平臺中批數據和流數據的統一查詢。
2)多版本多模式兼容的Flink SQL執行引擎設計。為了滿足不同數據規模、不同資源環境的數據開發需求,流批一體數據處理平臺設計了Local、Standalone、Yarn、Session四種不同的任務運行模式,同時也支持在不同版本Flink集群中執行。
流批一體數據處理平臺設計了集群管理功能,用于管理不同版本的集群。另外,在Flink SQL作業開發過程可以選擇不同的執行模式,這樣就滿足了多版本多模式兼容的執行引擎。
3)自定義函數設計。流批一體數據處理平臺研制的目的是滿足用戶對數據加工處理的需求,因此,在設計過程中預置了常用的函數,這樣在數據開發過程中就可以直接使用預置的函數;另外,對于不滿足的函數需求,平臺設計了自定義函數管理功能,即可以通過配置自定義函數的相關數據,就能滿足開發過程中調用的需求,這樣能夠大大提高系統的可用性,提高數據開發的效率。
1.3.2? 關鍵技術
1)XxlJob調度引擎與Flink引擎適配技術。XxlJob中有執行器和調度器兩個功能組件,調度器負責按照調度周期調度任務,執行器負責執行任務,流批一體數據處理平臺中用到的關鍵技術是XxlJob調度引擎與Flink引擎適配技術,即實現XxlJob執行器功能,XxlJob執行器具備Flink引擎執行任務功能。
執行器能解析批數據處理任務參數,其中任務參數包括SQL語句、Flink集群信息、批處理任務等參數信息,然后調用Flink引擎統一的API接口方法,進而批數據處理任務就以任務參數的形式提交給Flink引擎去處理了。
2)基于Checkpoint和SavePoint的實時流狀態管理技術。Flink是一個有狀態的分布式流式計算引擎,Flink中的每個Function或者是Operator都可以是有狀態的,有狀態的Function在處理流數據或事件的同時會存儲一部分用戶自定義的數據,這使得Flink的狀態可以作為任何更精細操作的基礎。然而總會有一些原因使流任務出現異常(如網絡故障、代碼bug等),為了使得狀態可以容錯,流批一體數據處理平臺中引入了Checkpoint機制。Checkpoint使得Flink能夠恢復流任務的狀態和位置,從而為流任務提供與無故障執行相同的語義。Savepoint在底層使用的代碼和Checkpoint的代碼是一樣的,因為Savepoint可以看作Checkpoint在特定時期的一個狀態快照[10]。
流批一體數據處理平臺定期保存狀態數據到存儲上,故障發生后從之前的備份中恢復,整個被稱為Checkpoint機制,它為Flink提供了Exactly-Once的保障。流批一體數據處理平臺中提供Checkpoint和SavePoint的實時流狀態管理技術,任務在失敗或出現異常的情況下,可以通過Checkpoint和SavePoint的實時流狀態管理中的一鍵恢復功能達到任務從失敗點開始繼續執行的效果。具體流程如圖4所示。
圖4? Checkpoint機制處理流程圖
由圖4可知,Checkpoint Barrier被插入到數據流中,它將數據流切分成段。Flink的Checkpoint邏輯是:一段新數據流入導致狀態發生了變化,Flink的算子接收到Checkpoint Barrier后,對狀態進行快照。每個Checkpoint Barrier有一個ID,表示該段數據屬于哪次Checkpoint。當ID為n的Checkpoint Barrier到達每個算子后,表示要對n-1和n之間狀態的更新做快照。Checkpoint Barrier有點像Event Time中的Watermark,它被插入到數據流中,但并不影響數據流原有的處理順序[11]。
2? 平臺應用
平臺部分截圖如圖5所示。
平臺現已應用于四川高速集團、貴陽政府單位示范應用,主要解決數據采集、流批一體數據處理問題,有效支撐企事業單位的數據處理需求,提高數據處理效率,賦能企事業單位的運行管理。
3? 結? 論
本文針對流數據和批數據等特性,突破了批數據和流數據的統一表達和查詢關鍵技術,設計了一種流批一體的數據處理方法,并通過平臺化研制流批一體數據處理核心模塊,性能與成熟度達到國內先進水平。該平臺先后在四川高速集團、貴陽政府單位示范應用,應用表明平臺不僅統一了流批計算框架和引擎,而且明顯減少了部署成本,提高了數據處理效率。
參考文獻:
[1] 鄭陽婷.數字化技術在城市管理中的應用 [J].電子技術,2023,52(3):274-275.
[2] 郭亞楠,肖菡.云計算在計算機數據處理中的應用 [J].電子技術,2023,52(2):198-199.
[3] 周林興,崔云萍.智慧城市視域下政府數據開放共享機制研究 [J].現代情報,2021,41(8):147-159.
[4] 黃春,姜浩,全哲,等.面向深度學習的批處理矩陣乘法設計與實現 [J].計算機學報,2022,45(2):225-239.
[5] 李碩,梁毅.面向Spark的批處理應用執行時間預測模型 [J].計算機工程與應用,2021,57(5):79-87.
[6] ZAHARIA M,XIN R S,WENDELL P,et al. Apache Spark: a unified engine for big data processing [J].COMMUNICATIONS OF THE ACM,2016,59(11):56-65.
[7] CARBONE P,EWEN S,HARIDI S,et al. Apache Flink?: Stream and Batch Processing in a Single Engine [EB/OL].[2023-07-16].https://xdxk.cbpt.cnki.net/EditorDN/EditorWorkPlace/ReferParallel.aspx.
[8] 陳氫,宋仕偉.數據治理視角下的湖倉一體架構研究 [J].數字圖書館論壇,2023,19(4):19-28.
[9] 王玉真.基于Flink的實時計算平臺的設計與實現 [D].南昌:南昌大學,2020.
[10] 于志良.基于Flink的鯨魚優化K-Means算法 [J].互聯網周刊,2023(4):83-85.
[11] 慶驍.面向FLINK流處理框架的容錯策略優化研究 [D].哈爾濱:哈爾濱工業大學,2019.
作者簡介:周維(1990—),男,漢族,貴州貴陽人,工程師,碩士,主要研究方向:數據治理、數據挖掘、數據開發。