周維 曹揚(yáng) 謝紅韜 胡建
收稿日期:2023-08-17
基金項(xiàng)目:國(guó)家自然科學(xué)基金(U19B2027)
DOI:10.19850/j.cnki.2096-4706.2024.06.007
摘? 要:當(dāng)今,數(shù)據(jù)的規(guī)模和復(fù)雜性不斷增加,對(duì)數(shù)據(jù)處理平臺(tái)的要求也越來(lái)越高。傳統(tǒng)的批處理和實(shí)時(shí)處理技術(shù)各有優(yōu)缺點(diǎn),很難滿(mǎn)足大規(guī)模數(shù)據(jù)處理的需求。因此,流批一體化的數(shù)據(jù)處理平臺(tái)應(yīng)運(yùn)而生。文章在討論流批一體核心架構(gòu)設(shè)計(jì)的基礎(chǔ)上,提出一種基于有狀態(tài)實(shí)時(shí)流的流批一體數(shù)據(jù)處理方法,并通過(guò)平臺(tái)化的方式實(shí)現(xiàn)流批一體數(shù)據(jù)的處理與計(jì)算。該平臺(tái)先后在四川高速集團(tuán)、貴陽(yáng)政府單位示范應(yīng)用,應(yīng)用結(jié)果表明平臺(tái)不僅統(tǒng)一了批處理和流處理框架,而且具有高效、可靠、可擴(kuò)展等優(yōu)點(diǎn),同時(shí)能夠滿(mǎn)足大規(guī)模數(shù)據(jù)處理的需求。該平臺(tái)的實(shí)現(xiàn)對(duì)于提高數(shù)據(jù)處理效率和準(zhǔn)確性具有重要意義。
關(guān)鍵詞:批處理;有狀態(tài)實(shí)時(shí)流;平臺(tái)化;流批一體
中圖分類(lèi)號(hào):TP311.1? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):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? 引? 言
數(shù)據(jù)為數(shù)字經(jīng)濟(jì)的發(fā)展提供了不可或缺的動(dòng)力支持,一是數(shù)據(jù)量井噴式增長(zhǎng)。根據(jù)國(guó)際數(shù)據(jù)公司(IDC)預(yù)測(cè),2025年全球數(shù)據(jù)量將達(dá)到163 ZB。隨著數(shù)據(jù)量指數(shù)級(jí)增長(zhǎng),數(shù)據(jù)分析算法和技術(shù)迭代更新,數(shù)據(jù)管理與治理手段升級(jí),數(shù)據(jù)創(chuàng)新應(yīng)用和產(chǎn)業(yè)優(yōu)化升級(jí),數(shù)據(jù)對(duì)社會(huì)變革的影響更加深遠(yuǎn)。二是數(shù)據(jù)產(chǎn)業(yè)規(guī)模持續(xù)擴(kuò)張。據(jù)IDC預(yù)測(cè),2019—2023年全球大數(shù)據(jù)市場(chǎng)相關(guān)收益將實(shí)現(xiàn)13.1%的復(fù)合年均增長(zhǎng)率,2023年總收益將達(dá)到3 126.7億美元。三是數(shù)據(jù)技術(shù)產(chǎn)品不斷創(chuàng)新發(fā)展。當(dāng)前數(shù)據(jù)底層技術(shù)框架日趨成熟,數(shù)據(jù)技術(shù)產(chǎn)品不斷分層細(xì)化,覆蓋數(shù)據(jù)存儲(chǔ)、計(jì)算、分析、集成、管理、運(yùn)維等各個(gè)方面的技術(shù)有了長(zhǎng)足的進(jìn)步。以大數(shù)據(jù)和數(shù)據(jù)技術(shù)為基礎(chǔ)發(fā)展起來(lái)的云計(jì)算、物聯(lián)網(wǎng)、人工智能、區(qū)塊鏈等新技術(shù)對(duì)社會(huì)發(fā)展產(chǎn)生顛覆影響,同時(shí),這些新技術(shù)的發(fā)展也促使流批一體數(shù)據(jù)處理技術(shù)的需求日益增加[1]。一是云計(jì)算技術(shù)的普及,越來(lái)越多的企業(yè)將數(shù)據(jù)處理任務(wù)轉(zhuǎn)移到云端,使得流批一體數(shù)據(jù)處理技術(shù)的需求不斷增加[2]。二是物聯(lián)網(wǎng)設(shè)備的廣泛應(yīng)用,海量的實(shí)時(shí)數(shù)據(jù)不斷涌現(xiàn),需要流批一體數(shù)據(jù)處理技術(shù)來(lái)實(shí)時(shí)處理這些數(shù)據(jù)。三是人工智能和機(jī)器學(xué)習(xí)技術(shù)的發(fā)展,越來(lái)越多的企業(yè)需要處理實(shí)時(shí)數(shù)據(jù)來(lái)支持這些技術(shù)的應(yīng)用。
隨著智慧城市[3]、電子政務(wù)的發(fā)展,以及物聯(lián)網(wǎng)、人工智能、邊緣計(jì)算等技術(shù)的演進(jìn),傳統(tǒng)批數(shù)據(jù)的處理架構(gòu)難以滿(mǎn)足企事業(yè)單位的需求,分開(kāi)搭建批數(shù)據(jù)和流數(shù)據(jù)的架構(gòu)造成運(yùn)維、學(xué)習(xí)成本陡增[4]。因此有必要從性能、安全容錯(cuò)、便捷使用等方面對(duì)流批一體的數(shù)據(jù)處理架構(gòu)展開(kāi)調(diào)研、分析與研究,孵化出流批一體化的數(shù)據(jù)處理新模式與數(shù)據(jù)處理新技術(shù),新技術(shù)不僅可以提供低延遲的實(shí)時(shí)數(shù)據(jù)處理能力,而且能提供高效的批處理能力,從而能滿(mǎn)足新技術(shù)領(lǐng)域帶來(lái)的應(yīng)用需求。
1? 平臺(tái)設(shè)計(jì)
1.1? 平臺(tái)架構(gòu)設(shè)計(jì)
以Spark [5,6]為代表的批處理框架和以Flink [7]為代表的流處理框架,兩者各有特點(diǎn),現(xiàn)實(shí)生產(chǎn)中既有批處理任務(wù)又有流處理任務(wù),如果同時(shí)維護(hù)這兩套處理框架,就會(huì)造成以下問(wèn)題:一是需同時(shí)維護(hù)兩套計(jì)算架構(gòu),造成大量管理成本和資源浪費(fèi);二是兩套計(jì)算架構(gòu)的處理代碼并不統(tǒng)一,需維護(hù)兩套加工代碼;三是兩套并行的架構(gòu)容易導(dǎo)致數(shù)據(jù)處理結(jié)果不一致[8]。本文平臺(tái)架構(gòu)設(shè)計(jì)過(guò)程中,均采用Flink作為計(jì)算處理框架,進(jìn)而來(lái)實(shí)現(xiàn)流批一體的數(shù)據(jù)處理[9]。
1.1.1? 系統(tǒng)架構(gòu)
系統(tǒng)架構(gòu)圖主要將流批一體數(shù)據(jù)處理平臺(tái)分為4個(gè)部分:數(shù)據(jù)源管理、數(shù)據(jù)處理、集群管理、數(shù)據(jù)資源池,如圖1所示。
圖1? 流批一體數(shù)據(jù)處理平臺(tái)系統(tǒng)架構(gòu)圖
數(shù)據(jù)源管理:數(shù)據(jù)源管理能將各類(lèi)不同的數(shù)據(jù)源接入進(jìn)系統(tǒng)并進(jìn)行統(tǒng)一管理,數(shù)據(jù)源的接入可以獲取到數(shù)據(jù)源的元數(shù)據(jù)以及Flink的元數(shù)據(jù),這些元數(shù)據(jù)為數(shù)據(jù)處理過(guò)程中提供連接參數(shù)。
數(shù)據(jù)處理:數(shù)據(jù)處理分為實(shí)時(shí)數(shù)據(jù)處理任務(wù)和離線數(shù)據(jù)處理任務(wù)。實(shí)時(shí)數(shù)據(jù)處理任務(wù)直接將任務(wù)提交到Flink集群;離線數(shù)據(jù)處理任務(wù)是任務(wù)調(diào)度工具根據(jù)配置的調(diào)度模板信息,即調(diào)度時(shí)間,進(jìn)行任務(wù)執(zhí)行,其中重要的是任務(wù)調(diào)度工具的實(shí)現(xiàn),調(diào)度工具中只需要模擬Flink的任務(wù)執(zhí)行即可完成離線數(shù)據(jù)任務(wù)的處理。數(shù)據(jù)處理中最關(guān)鍵的設(shè)計(jì)是統(tǒng)一了實(shí)時(shí)數(shù)據(jù)處理和離線數(shù)據(jù)處理的統(tǒng)一表達(dá),即實(shí)現(xiàn)了同一套FlinkSQL代碼能兼容處理流數(shù)據(jù)和批數(shù)據(jù)的問(wèn)題。
集群管理:提交Flink任務(wù)時(shí),首先要保證安裝了Flink集群,其中Flink當(dāng)前支持的集群模式包括Standalone集群、Yarn集群、Kubernetes集群;其次,F(xiàn)link集群是利用Flink中的執(zhí)行器來(lái)處理提交過(guò)來(lái)的任務(wù)。
數(shù)據(jù)資源池:數(shù)據(jù)資源池是數(shù)據(jù)統(tǒng)一集中管理的位置,將數(shù)據(jù)分為主題應(yīng)用數(shù)據(jù)、實(shí)時(shí)數(shù)倉(cāng)等部分。經(jīng)過(guò)Flink任務(wù)處理之后,處理的數(shù)據(jù)就能寫(xiě)入到數(shù)據(jù)資源池中的數(shù)據(jù)表或其他數(shù)據(jù)系統(tǒng)中。
另外,流批一體數(shù)據(jù)處理平臺(tái)中處理后的數(shù)據(jù),可為其他外部系統(tǒng)中的數(shù)據(jù)采集環(huán)節(jié)提供離線數(shù)據(jù)采集和實(shí)時(shí)數(shù)據(jù)采集的支撐,同時(shí)也可以為數(shù)據(jù)湖中的數(shù)據(jù)預(yù)處理、清洗加工、挖掘分析提供離線和實(shí)時(shí)的數(shù)據(jù)加工任務(wù)執(zhí)行引擎。
1.1.2? 技術(shù)架構(gòu)
流批一體數(shù)據(jù)處理平臺(tái)技術(shù)架構(gòu)包含4層,如圖2所示。
圖2? 流批一體數(shù)據(jù)處理平臺(tái)技術(shù)架構(gòu)圖
前端采用Vue作為開(kāi)發(fā)框架,開(kāi)發(fā)B/S架構(gòu)的軟件系統(tǒng),Vue不僅易于上手,還便于與第三方庫(kù)或既有項(xiàng)目整合。
服務(wù)端使用基于Java的Spring Boot框架進(jìn)行開(kāi)發(fā),它基于Spring 4.0設(shè)計(jì),不僅繼承了Spring框架原有的優(yōu)秀特性,而且還通過(guò)簡(jiǎn)化配置來(lái)進(jìn)一步簡(jiǎn)化了Spring應(yīng)用的整個(gè)搭建和開(kāi)發(fā)過(guò)程。另外SpringBoot通過(guò)集成大量的框架使得依賴(lài)包的版本沖突,以及引用的不穩(wěn)定性等問(wèn)題得到了很好的解決。流批一體數(shù)據(jù)處理平臺(tái)需要對(duì)數(shù)據(jù)加工處理任務(wù)進(jìn)行周期調(diào)度和實(shí)時(shí)調(diào)度,此處需要突破的關(guān)鍵技術(shù)是實(shí)現(xiàn)XXL-JOB任務(wù)調(diào)度引擎與Flink結(jié)合,進(jìn)而實(shí)現(xiàn)流任務(wù)和批任務(wù)的定時(shí)調(diào)度。
流批一體數(shù)據(jù)處理平臺(tái)的任務(wù)執(zhí)行都通過(guò)Flink Client向Flink集群提交任務(wù)。
流批一體數(shù)據(jù)處理平臺(tái)理論上是與Flink完全解耦的,因此流批一體數(shù)據(jù)處理平臺(tái)需要通過(guò)可配置的方式接入Flink集群,需要實(shí)現(xiàn)對(duì)原生Flink、CDH、HDP等不同F(xiàn)link的接入。
1.1.3? 功能架構(gòu)
流批一體數(shù)據(jù)處理平臺(tái)功能架構(gòu)包括作業(yè)管理、集群管理、函數(shù)管理、連接器管理等主要模塊,功能架構(gòu)圖如圖3所示。其中作業(yè)管理是整個(gè)系統(tǒng)的核心,提供SQL、JAR包、圖形組件三種作業(yè)開(kāi)發(fā)模式,方便不同層次的數(shù)據(jù)開(kāi)發(fā)工程師使用。為滿(mǎn)足不同數(shù)據(jù)規(guī)模、資源條件的應(yīng)用場(chǎng)景,支持Local、Standalone、Session、Yarn四種模式的作業(yè)提交方式。
1.2? 平臺(tái)功能設(shè)計(jì)
基于有狀態(tài)實(shí)時(shí)流的流批一體數(shù)據(jù)處理平臺(tái)以“框架統(tǒng)一、處理高效、操作便捷”為指導(dǎo)思想,構(gòu)建滿(mǎn)足于流批一體的數(shù)據(jù)計(jì)算的需求。系統(tǒng)分為9個(gè)部分:數(shù)據(jù)源管理、連接器管理、函數(shù)管理、集群管理、執(zhí)行器管理、調(diào)度模板管理、任務(wù)管理、作業(yè)管理、運(yùn)維中心。其功能概述如下:
1)數(shù)據(jù)源管理。將需進(jìn)行數(shù)據(jù)處理的外部數(shù)據(jù)源進(jìn)行統(tǒng)一接入和管理,通過(guò)數(shù)據(jù)列表將數(shù)據(jù)源進(jìn)行分門(mén)別類(lèi),方便進(jìn)行查詢(xún)和檢索。數(shù)據(jù)源類(lèi)型支持關(guān)系型數(shù)據(jù)庫(kù)(MySQL、ClickHouse)、消息中間件Kafka、緩存數(shù)據(jù)庫(kù)Redis、非關(guān)系型數(shù)據(jù)庫(kù)MongoDB等數(shù)據(jù)源的接入。所有外部數(shù)據(jù)源的密碼進(jìn)行加密存儲(chǔ),保證數(shù)據(jù)安全。數(shù)據(jù)源管理功能如表1所示。
2)連接器管理。Flink Connector是Flink與外部系統(tǒng)集成和連接的橋梁,流批一體數(shù)據(jù)處理平臺(tái)作為一個(gè)共性的、應(yīng)用工具軟件,需要滿(mǎn)足不同場(chǎng)景的數(shù)據(jù)庫(kù)適配需求。連接器管理提供對(duì)Flink Connector的統(tǒng)一管理功能,包括Flink Connector的上傳到本地和上傳到集群的功能等。連接器管理功能如表2所示。
3)函數(shù)管理。函數(shù)管理是任務(wù)開(kāi)發(fā)工作的基礎(chǔ),旨在建立統(tǒng)一的Flink函數(shù)管理入口,方便FlinkSQL任務(wù)開(kāi)發(fā)時(shí)調(diào)用,其中函數(shù)類(lèi)型包括比較函數(shù)、邏輯函數(shù)、字符串函數(shù)、Streaming、Batch等。具體功能如表3所示。
表1? 數(shù)據(jù)源管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
數(shù)據(jù)源列表 支持?jǐn)?shù)據(jù)源目錄的新增、刪除、修改、查詢(xún),支持?jǐn)?shù)據(jù)源和數(shù)據(jù)源目錄的綁定,支持按照數(shù)據(jù)源目錄篩選數(shù)據(jù)源列表
關(guān)系型
數(shù)據(jù)庫(kù) 支持MySQL、ClickHouse數(shù)據(jù)源的新增、刪除、修改、查詢(xún)和連接、心跳檢測(cè)、Flink連接配置
非關(guān)系型
數(shù)據(jù)庫(kù) 支持MongoDB數(shù)據(jù)庫(kù)的接入的新增、刪除、修改、查詢(xún)和連接、心跳檢測(cè)、Flink連接配置
消息中間件 支持Kafka數(shù)據(jù)庫(kù)的接入的新增、刪除、修改、查詢(xún)和連接、心跳檢測(cè)、Flink連接配置
緩存數(shù)據(jù)庫(kù) 支持Redis數(shù)據(jù)源的新增、刪除、修改、查詢(xún)和連接、心跳檢測(cè)、Flink連接配置
表2? 連接器管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
官方連接器管理 支持連接器的新增、刪除、修改、查詢(xún),同步
自定義連接器管理 支持連接器的新增、刪除、修改、查詢(xún),下載、同步
表3? 函數(shù)管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
函數(shù)管理 支持函數(shù)的新增、刪除、修改和查詢(xún)、啟用、調(diào)用
4)集群管理。集群管理也是任務(wù)開(kāi)發(fā)工作的基
礎(chǔ),建立統(tǒng)一的集群管理界面,方便FlinkSQL或FlinkJar任務(wù)開(kāi)發(fā)時(shí),能選擇任務(wù)的提交集群,集群管理包括Flink集群管理和Hadoop集群管理,其中Flink集群又可以分為Standalone、Yarn Session、Yarn Per-job、Yarn Application等。集群管理功能如表4所示。
表4? 集群管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
Flink集群
管理 支持集群的新增、刪除、修改和查詢(xún)、啟用、調(diào)用、心跳檢測(cè)、回收功能;支持跳轉(zhuǎn)到Flink集群的Dashboard界面
Hadoop集群管理 支持集群的新增、刪除、修改和查詢(xún)、測(cè)試;支持指定Hadoop集群的配置文件路徑和Flink集群的配置文件路徑以及Flink Lib包路徑
5)執(zhí)行器管理。執(zhí)行器是批處理任務(wù)執(zhí)行和調(diào)度的工具,批處理任務(wù)提交后,任務(wù)會(huì)提交給執(zhí)行器去處理。執(zhí)行器管理的主要功能是提供執(zhí)行器的注冊(cè),便于執(zhí)行器的統(tǒng)一管理。執(zhí)行器管理功能如表5所示。
表5? 執(zhí)行器管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
執(zhí)行器管理 支持執(zhí)行器的新增、刪除、修改和查詢(xún);支持執(zhí)行器的自動(dòng)注冊(cè)和手動(dòng)錄入
6)調(diào)度模板管理。調(diào)度模板是批處理任務(wù)的調(diào)度配置信息,便于執(zhí)行器按照調(diào)度配置信息去執(zhí)行任務(wù),另外,調(diào)度模板的管理也方便多個(gè)任務(wù)同時(shí)使用同一個(gè)調(diào)度模板信息,這樣就不會(huì)每一個(gè)任務(wù)都需要配置調(diào)度信息。調(diào)度模板管理提供執(zhí)行器路由策略、阻塞處理策略、調(diào)度周期等參數(shù)配置。調(diào)度模板管理功能如表6所示。
表6? 調(diào)度模板管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
調(diào)度模板管理 支持調(diào)度模板的新增、刪除、修改和查詢(xún);支持注冊(cè)節(jié)點(diǎn)、下次觸發(fā)時(shí)間查詢(xún);支持執(zhí)行器選擇
調(diào)度周期管理 支持分鐘、小時(shí)、天、周、月等調(diào)度周期
7)任務(wù)管理。任務(wù)管理是編排流批一體任務(wù)的管理界面,為滿(mǎn)足數(shù)據(jù)規(guī)模大、實(shí)時(shí)性高、數(shù)據(jù)類(lèi)型多樣的數(shù)據(jù)處理要求,流批一體數(shù)據(jù)處理平臺(tái)需要具備實(shí)時(shí)計(jì)算和批計(jì)算兩種功能,且需要具備定時(shí)調(diào)度的功能。具體功能如表7所示。
8)作業(yè)管理。作業(yè)管理是流批一體數(shù)據(jù)處理平臺(tái)的核心功能。作業(yè)管理是流批一體作業(yè)的開(kāi)發(fā)、執(zhí)行、部署等操作進(jìn)行管理;作業(yè)開(kāi)發(fā)包括FlinkSQL、Flink圖形化組件、Flink Jar開(kāi)發(fā)三種模式;作業(yè)執(zhí)行包括作業(yè)發(fā)布、作業(yè)提交到集群、作業(yè)停止、作業(yè)恢復(fù)等操作功能;作業(yè)部署是將作業(yè)提交到集群進(jìn)行執(zhí)行,作業(yè)的執(zhí)行模式包括Local、Standalone、Session、YarnApplication等模式。具體功能如表8所示。
表7? 任務(wù)管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
周期任務(wù)管理 支持周期任務(wù)的新增、刪除、修改和查詢(xún),支持多種數(shù)據(jù)類(lèi)型的數(shù)據(jù)處理
周期任務(wù)編排 支持周期任務(wù)拖拽式任務(wù)編排
周期任務(wù)調(diào)度 周期處理任務(wù)支持周期性調(diào)度和手動(dòng)執(zhí)行,支持分鐘、小時(shí)、天、周、月等調(diào)度周期
周期任務(wù)啟動(dòng) 支持周期任務(wù)按照任務(wù)調(diào)度配置調(diào)度執(zhí)行任務(wù)
周期任務(wù)停止 支持周期任務(wù)按照任務(wù)停止執(zhí)行
周期任務(wù)執(zhí)行一次 支持周期任務(wù)手動(dòng)執(zhí)行一次操作
實(shí)時(shí)任務(wù)管理 支持實(shí)時(shí)流計(jì)算任務(wù)的新增、刪除、修改和查詢(xún),支持實(shí)時(shí)計(jì)算引擎
實(shí)時(shí)任務(wù)編排 支持實(shí)時(shí)流計(jì)算拖拽式任務(wù)編排
實(shí)時(shí)任務(wù)啟動(dòng) 支持實(shí)時(shí)任務(wù)啟動(dòng)執(zhí)行
實(shí)時(shí)任務(wù)停止 支持周期任務(wù)停止執(zhí)行
表8? 作業(yè)管理功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
作業(yè)開(kāi)發(fā) 支持保存SQL、語(yǔ)法檢測(cè)、調(diào)試、會(huì)話、元數(shù)據(jù)獲取、數(shù)據(jù)源獲取、環(huán)境配置、作業(yè)配置、執(zhí)行配置功能
作業(yè)執(zhí)行 支持執(zhí)行當(dāng)前SQL、異步提交、發(fā)布、上線、下線功能
作業(yè)部署 支持不同模式的作業(yè)部署,包括Local、Standalone、Session、YarnApplication
作業(yè)日志 支持查看Flink啟動(dòng)日志和執(zhí)行日志的查看
Jar管理 支持Flink jar包的上傳、下載、刪除功能
9)運(yùn)維中心。運(yùn)維中心提供任務(wù)操作與狀態(tài)等多方位的運(yùn)維能力。當(dāng)開(kāi)發(fā)完成并提交和發(fā)布至集群后,即可在運(yùn)維中心對(duì)任務(wù)進(jìn)行運(yùn)維操作,包括作業(yè)實(shí)例運(yùn)行詳情查看、作業(yè)任務(wù)的關(guān)鍵指標(biāo)查看、集群信息、作業(yè)快照、異常信息、作業(yè)日志、自動(dòng)調(diào)優(yōu)、配置信息、FlinkSQL、數(shù)據(jù)地圖、即席查詢(xún)、歷史版本、告警記錄。具體功能如表9所示。
表9? 運(yùn)維中心功能項(xiàng)
功能項(xiàng)名稱(chēng) 功能項(xiàng)描述
作業(yè)實(shí)例 支持查看Flink作業(yè)實(shí)例狀態(tài)
作業(yè)總覽 支持查看Flink作業(yè)的各監(jiān)控指標(biāo),包括作業(yè)狀態(tài)、重啟次數(shù)等指標(biāo)
集群信息 支持查看集群實(shí)例信息
作業(yè)快照 支持查看 該任務(wù)的CheckPoint SavePoint,并且可以基于某一個(gè)CheckPoint/SavePoint重啟該任務(wù)
異常信息 支持查看Flink作業(yè)啟動(dòng)及運(yùn)行時(shí)的異常
歷史版本 支持對(duì)比查看Flink作業(yè)發(fā)布后的多個(gè)版本
告警記錄 支持查看Flink作業(yè)提交和發(fā)布后的告警信息
一鍵上下線 支持已發(fā)布的作業(yè)進(jìn)行一鍵上下線操作
1.3? 平臺(tái)關(guān)鍵設(shè)計(jì)和關(guān)鍵技術(shù)
1.3.1? 關(guān)鍵設(shè)計(jì)
1)批數(shù)據(jù)和流數(shù)據(jù)的統(tǒng)一表達(dá)和查詢(xún)?cè)O(shè)計(jì)。針對(duì)企業(yè)數(shù)字化轉(zhuǎn)型建設(shè)過(guò)程中對(duì)離線數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)的融合處理需求,將業(yè)務(wù)數(shù)據(jù)化,數(shù)據(jù)算子化,設(shè)計(jì)可復(fù)制、可擴(kuò)展的UDF算子和連接器,通過(guò)引入動(dòng)態(tài)表概念,把離線表、動(dòng)態(tài)流都表達(dá)為表,設(shè)計(jì)了批處理和流處理在操作對(duì)象表達(dá)方式上的統(tǒng)一,保證對(duì)流式數(shù)據(jù)查詢(xún)的連續(xù)性。同時(shí),支持對(duì)流式計(jì)算的撤銷(xiāo)操作,避免相同鍵值的數(shù)據(jù)參與多次計(jì)算,實(shí)現(xiàn)在流批一體數(shù)據(jù)處理過(guò)程中對(duì)持續(xù)增長(zhǎng)和持續(xù)輸出的流數(shù)據(jù)的正確操作。形成一套將任意標(biāo)準(zhǔn)的SQL轉(zhuǎn)化成實(shí)時(shí)計(jì)算程序的技術(shù)方案,采用SQL作為統(tǒng)一的編程語(yǔ)言,通過(guò)可視化的人機(jī)交互式方式,完整的使用SQL語(yǔ)義來(lái)表達(dá)流計(jì)算任務(wù),達(dá)到對(duì)批數(shù)據(jù)和流數(shù)據(jù)的查詢(xún)使用同一套SQL語(yǔ)句的目的,實(shí)現(xiàn)批流一體計(jì)算平臺(tái)中批數(shù)據(jù)和流數(shù)據(jù)的統(tǒng)一查詢(xún)。
2)多版本多模式兼容的Flink SQL執(zhí)行引擎設(shè)計(jì)。為了滿(mǎn)足不同數(shù)據(jù)規(guī)模、不同資源環(huán)境的數(shù)據(jù)開(kāi)發(fā)需求,流批一體數(shù)據(jù)處理平臺(tái)設(shè)計(jì)了Local、Standalone、Yarn、Session四種不同的任務(wù)運(yùn)行模式,同時(shí)也支持在不同版本Flink集群中執(zhí)行。
流批一體數(shù)據(jù)處理平臺(tái)設(shè)計(jì)了集群管理功能,用于管理不同版本的集群。另外,在Flink SQL作業(yè)開(kāi)發(fā)過(guò)程可以選擇不同的執(zhí)行模式,這樣就滿(mǎn)足了多版本多模式兼容的執(zhí)行引擎。
3)自定義函數(shù)設(shè)計(jì)。流批一體數(shù)據(jù)處理平臺(tái)研制的目的是滿(mǎn)足用戶(hù)對(duì)數(shù)據(jù)加工處理的需求,因此,在設(shè)計(jì)過(guò)程中預(yù)置了常用的函數(shù),這樣在數(shù)據(jù)開(kāi)發(fā)過(guò)程中就可以直接使用預(yù)置的函數(shù);另外,對(duì)于不滿(mǎn)足的函數(shù)需求,平臺(tái)設(shè)計(jì)了自定義函數(shù)管理功能,即可以通過(guò)配置自定義函數(shù)的相關(guān)數(shù)據(jù),就能滿(mǎn)足開(kāi)發(fā)過(guò)程中調(diào)用的需求,這樣能夠大大提高系統(tǒng)的可用性,提高數(shù)據(jù)開(kāi)發(fā)的效率。
1.3.2? 關(guān)鍵技術(shù)
1)XxlJob調(diào)度引擎與Flink引擎適配技術(shù)。XxlJob中有執(zhí)行器和調(diào)度器兩個(gè)功能組件,調(diào)度器負(fù)責(zé)按照調(diào)度周期調(diào)度任務(wù),執(zhí)行器負(fù)責(zé)執(zhí)行任務(wù),流批一體數(shù)據(jù)處理平臺(tái)中用到的關(guān)鍵技術(shù)是XxlJob調(diào)度引擎與Flink引擎適配技術(shù),即實(shí)現(xiàn)XxlJob執(zhí)行器功能,XxlJob執(zhí)行器具備Flink引擎執(zhí)行任務(wù)功能。
執(zhí)行器能解析批數(shù)據(jù)處理任務(wù)參數(shù),其中任務(wù)參數(shù)包括SQL語(yǔ)句、Flink集群信息、批處理任務(wù)等參數(shù)信息,然后調(diào)用Flink引擎統(tǒng)一的API接口方法,進(jìn)而批數(shù)據(jù)處理任務(wù)就以任務(wù)參數(shù)的形式提交給Flink引擎去處理了。
2)基于Checkpoint和SavePoint的實(shí)時(shí)流狀態(tài)管理技術(shù)。Flink是一個(gè)有狀態(tài)的分布式流式計(jì)算引擎,F(xiàn)link中的每個(gè)Function或者是Operator都可以是有狀態(tài)的,有狀態(tài)的Function在處理流數(shù)據(jù)或事件的同時(shí)會(huì)存儲(chǔ)一部分用戶(hù)自定義的數(shù)據(jù),這使得Flink的狀態(tài)可以作為任何更精細(xì)操作的基礎(chǔ)。然而總會(huì)有一些原因使流任務(wù)出現(xiàn)異常(如網(wǎng)絡(luò)故障、代碼bug等),為了使得狀態(tài)可以容錯(cuò),流批一體數(shù)據(jù)處理平臺(tái)中引入了Checkpoint機(jī)制。Checkpoint使得Flink能夠恢復(fù)流任務(wù)的狀態(tài)和位置,從而為流任務(wù)提供與無(wú)故障執(zhí)行相同的語(yǔ)義。Savepoint在底層使用的代碼和Checkpoint的代碼是一樣的,因?yàn)镾avepoint可以看作Checkpoint在特定時(shí)期的一個(gè)狀態(tài)快照[10]。
流批一體數(shù)據(jù)處理平臺(tái)定期保存狀態(tài)數(shù)據(jù)到存儲(chǔ)上,故障發(fā)生后從之前的備份中恢復(fù),整個(gè)被稱(chēng)為Checkpoint機(jī)制,它為Flink提供了Exactly-Once的保障。流批一體數(shù)據(jù)處理平臺(tái)中提供Checkpoint和SavePoint的實(shí)時(shí)流狀態(tài)管理技術(shù),任務(wù)在失敗或出現(xiàn)異常的情況下,可以通過(guò)Checkpoint和SavePoint的實(shí)時(shí)流狀態(tài)管理中的一鍵恢復(fù)功能達(dá)到任務(wù)從失敗點(diǎn)開(kāi)始繼續(xù)執(zhí)行的效果。具體流程如圖4所示。
圖4? Checkpoint機(jī)制處理流程圖
由圖4可知,Checkpoint Barrier被插入到數(shù)據(jù)流中,它將數(shù)據(jù)流切分成段。Flink的Checkpoint邏輯是:一段新數(shù)據(jù)流入導(dǎo)致?tīng)顟B(tài)發(fā)生了變化,F(xiàn)link的算子接收到Checkpoint Barrier后,對(duì)狀態(tài)進(jìn)行快照。每個(gè)Checkpoint Barrier有一個(gè)ID,表示該段數(shù)據(jù)屬于哪次Checkpoint。當(dāng)ID為n的Checkpoint Barrier到達(dá)每個(gè)算子后,表示要對(duì)n-1和n之間狀態(tài)的更新做快照。Checkpoint Barrier有點(diǎn)像Event Time中的Watermark,它被插入到數(shù)據(jù)流中,但并不影響數(shù)據(jù)流原有的處理順序[11]。
2? 平臺(tái)應(yīng)用
平臺(tái)部分截圖如圖5所示。
平臺(tái)現(xiàn)已應(yīng)用于四川高速集團(tuán)、貴陽(yáng)政府單位示范應(yīng)用,主要解決數(shù)據(jù)采集、流批一體數(shù)據(jù)處理問(wèn)題,有效支撐企事業(yè)單位的數(shù)據(jù)處理需求,提高數(shù)據(jù)處理效率,賦能企事業(yè)單位的運(yùn)行管理。
3? 結(jié)? 論
本文針對(duì)流數(shù)據(jù)和批數(shù)據(jù)等特性,突破了批數(shù)據(jù)和流數(shù)據(jù)的統(tǒng)一表達(dá)和查詢(xún)關(guān)鍵技術(shù),設(shè)計(jì)了一種流批一體的數(shù)據(jù)處理方法,并通過(guò)平臺(tái)化研制流批一體數(shù)據(jù)處理核心模塊,性能與成熟度達(dá)到國(guó)內(nèi)先進(jìn)水平。該平臺(tái)先后在四川高速集團(tuán)、貴陽(yáng)政府單位示范應(yīng)用,應(yīng)用表明平臺(tái)不僅統(tǒng)一了流批計(jì)算框架和引擎,而且明顯減少了部署成本,提高了數(shù)據(jù)處理效率。
參考文獻(xiàn):
[1] 鄭陽(yáng)婷.數(shù)字化技術(shù)在城市管理中的應(yīng)用 [J].電子技術(shù),2023,52(3):274-275.
[2] 郭亞楠,肖菡.云計(jì)算在計(jì)算機(jī)數(shù)據(jù)處理中的應(yīng)用 [J].電子技術(shù),2023,52(2):198-199.
[3] 周林興,崔云萍.智慧城市視域下政府?dāng)?shù)據(jù)開(kāi)放共享機(jī)制研究 [J].現(xiàn)代情報(bào),2021,41(8):147-159.
[4] 黃春,姜浩,全哲,等.面向深度學(xué)習(xí)的批處理矩陣乘法設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)學(xué)報(bào),2022,45(2):225-239.
[5] 李碩,梁毅.面向Spark的批處理應(yīng)用執(zhí)行時(shí)間預(yù)測(cè)模型 [J].計(jì)算機(jī)工程與應(yīng)用,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] 陳氫,宋仕偉.數(shù)據(jù)治理視角下的湖倉(cāng)一體架構(gòu)研究 [J].數(shù)字圖書(shū)館論壇,2023,19(4):19-28.
[9] 王玉真.基于Flink的實(shí)時(shí)計(jì)算平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn) [D].南昌:南昌大學(xué),2020.
[10] 于志良.基于Flink的鯨魚(yú)優(yōu)化K-Means算法 [J].互聯(lián)網(wǎng)周刊,2023(4):83-85.
[11] 慶驍.面向FLINK流處理框架的容錯(cuò)策略?xún)?yōu)化研究 [D].哈爾濱:哈爾濱工業(yè)大學(xué),2019.
作者簡(jiǎn)介:周維(1990—),男,漢族,貴州貴陽(yáng)人,工程師,碩士,主要研究方向:數(shù)據(jù)治理、數(shù)據(jù)挖掘、數(shù)據(jù)開(kāi)發(fā)。