馮 勇 呂冠儒* 李 微 安浩然
(1、山東省氣象局氣象防災(zāi)減災(zāi)重點(diǎn)實(shí)驗(yàn)室,山東 濟(jì)南 250031 2、山東省氣象信息中心,山東 濟(jì)南 250031 3、湖南省氣象信息中心,湖南 長沙 410118 4、濟(jì)南高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)氣象局,山東 濟(jì)南 250031)
在氣象領(lǐng)域,氣象數(shù)據(jù)集中于觀測、計(jì)算數(shù)據(jù)以及交換數(shù)據(jù),具有極強(qiáng)的實(shí)時(shí)性,一直是氣象業(yè)務(wù)和科研工作的基礎(chǔ),目前,氣象已進(jìn)入大數(shù)據(jù)時(shí)代,數(shù)據(jù)種類繁多,體量大[1]。根據(jù)山東省氣象信息中心近年來統(tǒng)計(jì),每年的數(shù)據(jù)增加量達(dá)100TB。2016 年12 月15 日,全國新一代天氣雷達(dá)信息共享平臺(tái)(CIMISS)[2]正式業(yè)務(wù)化運(yùn)行,具備了對(duì)全省基礎(chǔ)觀測數(shù)據(jù)實(shí)時(shí)數(shù)據(jù)服務(wù)的能力,全省氣象業(yè)務(wù)系統(tǒng)支撐能力得到有效提升,但是當(dāng)面對(duì)海量數(shù)據(jù)的訪問需求和毫秒級(jí)響應(yīng)的時(shí)效需求時(shí),以“x86+Oracle+盤陣”為主的山東省CIMISS 統(tǒng)一數(shù)據(jù)環(huán)境,無論在規(guī)模、性能,還是應(yīng)用服務(wù)的針對(duì)性方面都滿足不了現(xiàn)有業(yè)務(wù)要求。
山東省氣象信息中心通過升級(jí)省級(jí)氣象信息基礎(chǔ)設(shè)施池,優(yōu)化海量氣象數(shù)據(jù)匯聚、加工、服務(wù)和應(yīng)用支撐全流程,打造“專有+公共”混合云[3]的氣象大數(shù)據(jù)云平臺(tái)[4],搭建了氣象大數(shù)據(jù)云平臺(tái)分布式存儲(chǔ)體系,建設(shè)了一套完整的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)系統(tǒng)。為全省氣象部門和行業(yè)用戶提供統(tǒng)一服務(wù),取得了良好效果。
數(shù)據(jù)庫同步技術(shù)最先熱備容災(zāi)領(lǐng)域[5]。指的是通過技術(shù)手段將源端數(shù)據(jù)庫中的數(shù)據(jù)更新到其他數(shù)據(jù)庫中,從而保證數(shù)據(jù)庫中的數(shù)據(jù)一致,當(dāng)源端數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生改變時(shí),其他數(shù)據(jù)庫中的數(shù)據(jù)也要隨之發(fā)生改變,從而保證應(yīng)用需要。
目前,主流的數(shù)據(jù)同步方式主要有三種:數(shù)據(jù)庫直連方式同步、數(shù)據(jù)庫文件方式同步和數(shù)據(jù)庫日志解析方式同步。
Kafka 是由Scala 和Java 編寫的一個(gè)開源流處理平臺(tái),它可以處理消費(fèi)者在網(wǎng)站中的所有動(dòng)作流數(shù)據(jù),正在被越來越多的公司認(rèn)可。
Kafka 消息集群中主要包含三個(gè)部分:Producer(生產(chǎn)者)、Consumer Group(消費(fèi)者群組),Zookeeper 集群。在實(shí)際使用過程中,Producer 在向Kafka 集群發(fā)送消息之前,會(huì)對(duì)消息進(jìn)行Topic 分類,消費(fèi)者可以只關(guān)注自己需要的Topic 中的消息;Consumer 通過與kafka 集群建立長連接的方式,不斷地從集群中拉取消息,并記載位置偏移,保證數(shù)據(jù)不重復(fù)、不丟失,然后可以對(duì)這些消息進(jìn)行處理。
虛谷數(shù)據(jù)庫Binlog 是記錄所有虛谷數(shù)據(jù)庫表結(jié)構(gòu)變更和表數(shù)據(jù)修改的二進(jìn)制日志。主要包括兩類文件:第一種是二進(jìn)制日志索引文件(文件名后綴為.index),主要用于記錄所有的二進(jìn)制文件;第二種是二進(jìn)制日志文件(文件名后綴為.00000*),主要用來記錄數(shù)據(jù)庫所有的DDL 和DML(除了數(shù)據(jù)查詢語句)語句事件。
Binlog 模 式 分 為 三 種:Statement、Row 和Mixedlevel模式。
山東省氣象大數(shù)據(jù)云平臺(tái)數(shù)據(jù)存儲(chǔ)系統(tǒng)采用虛谷分布式數(shù)據(jù)庫部署,共部署節(jié)點(diǎn)16 個(gè),其中緩沖庫5 臺(tái),服務(wù)庫11 臺(tái)。數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)以自動(dòng)分片的方式進(jìn)行數(shù)據(jù)存儲(chǔ),數(shù)據(jù)通過內(nèi)部算法進(jìn)行分片處理并存儲(chǔ)到各個(gè)存儲(chǔ)服務(wù)器上。數(shù)據(jù)存儲(chǔ)以8M進(jìn)行自動(dòng)切片,主版本輪轉(zhuǎn)分配在各節(jié)點(diǎn),其對(duì)應(yīng)的副本隨機(jī)存儲(chǔ)在其他存儲(chǔ)服務(wù)器上,避免單點(diǎn)故障導(dǎo)致數(shù)據(jù)庫業(yè)務(wù)中斷。
為滿足全省氣象業(yè)務(wù)系統(tǒng)對(duì)海量氣象數(shù)據(jù)檢索時(shí)效的需求,對(duì)三種同步方式進(jìn)行比較,從操作性和時(shí)效性上的角度,最終確定基于Binlog+Kafka 的方式開展氣象數(shù)據(jù)同步架構(gòu)設(shè)計(jì)。氣象數(shù)據(jù)同步架構(gòu)設(shè)計(jì)圖如圖1 所示。
圖1 氣象數(shù)據(jù)同步架構(gòu)設(shè)計(jì)圖
根據(jù)虛谷數(shù)據(jù)庫變更日志Binlog 的配置采集策略,實(shí)現(xiàn)變更日志流讀取,并采用JDBC 技術(shù)解析變更數(shù)據(jù),將變更數(shù)據(jù)按照數(shù)據(jù)表為單元進(jìn)行封裝后,實(shí)時(shí)發(fā)送至數(shù)據(jù)存儲(chǔ)管理系統(tǒng)(SOD)的Kafka 消息集群服務(wù)中。
數(shù)據(jù)寫入模塊實(shí)時(shí)運(yùn)行,接受消費(fèi)隊(duì)列中的數(shù)據(jù)庫變更數(shù)據(jù),根據(jù)同步配置策略進(jìn)行數(shù)據(jù)篩選,比如觀測臺(tái)站的過濾、觀測要素的篩選等,然后將數(shù)據(jù)庫變更數(shù)據(jù)分發(fā)至目標(biāo)隊(duì)列Queue,最終寫入目標(biāo)數(shù)據(jù)庫(STDB/HADB),該種同步方式對(duì)數(shù)據(jù)庫的性能影響小,同步時(shí)效高,延時(shí)在毫秒級(jí)[6]。
此外,應(yīng)對(duì)緩沖庫和業(yè)務(wù)庫數(shù)據(jù)庫產(chǎn)品互異的情況,數(shù)據(jù)同步模塊添加數(shù)據(jù)轉(zhuǎn)換的接口,用來適配不同數(shù)據(jù)庫中數(shù)據(jù)的存儲(chǔ)類型。數(shù)據(jù)同步在添加同步任務(wù)后支持源表和目標(biāo)表之間字段信息的校驗(yàn),保障數(shù)據(jù)同步的一致性。
5.1 在氣象大數(shù)據(jù)云平臺(tái)部署數(shù)據(jù)庫日志采集工具虛谷同步工具xuguSyncer,實(shí)現(xiàn)從緩沖庫采集日志節(jié)點(diǎn)抽取緩沖庫Binlog 日志,并以二進(jìn)制的格式發(fā)送至氣象大數(shù)據(jù)云平臺(tái)“天擎”Kafka。
5.2 數(shù)據(jù)寫入模塊對(duì)氣象大數(shù)據(jù)云平臺(tái)Kafka 消息服務(wù)進(jìn)行消費(fèi)處理,在消費(fèi)過程中使用offset 記錄當(dāng)前消費(fèi)的位置,保證數(shù)據(jù)的不間斷性。具體核心代碼如下:
并通過反序列化轉(zhuǎn)化成SQL 語句,按照數(shù)據(jù)表不同進(jìn)行SQL 分類。采用JDBC 技術(shù)進(jìn)行數(shù)據(jù)庫寫入氣象大數(shù)據(jù)云平臺(tái)服務(wù)庫和歷史分析庫。SQL 語句如圖2 所示。
圖2 數(shù)據(jù)同步后轉(zhuǎn)換成SQL 語句
數(shù)據(jù)寫入成功后的同步日志如圖3 所示。
圖3 數(shù)據(jù)同步成功日志
選取山東省1763 個(gè)區(qū)域自動(dòng)站和123 個(gè)國家地面氣象自動(dòng)站,2021 年1 月1 日00 時(shí)至2021 年2 月1 日中國地面逐小時(shí)數(shù)據(jù)共計(jì)1357920 條數(shù)據(jù),2021 年1 月1 日00 時(shí)00 分至2021 年1 月3 日00 時(shí)00 分中國地面分鐘降水?dāng)?shù)據(jù)共計(jì)5374080 條數(shù)據(jù)為測試數(shù)據(jù)。將氣象大數(shù)據(jù)云平臺(tái)緩沖庫向氣象大數(shù)據(jù)云平臺(tái)服務(wù)庫和歷史分析庫的同步耗時(shí)進(jìn)行對(duì)比分析見表1,可以看出基于Binlog+Kafka 的氣象數(shù)據(jù)同步架構(gòu),在進(jìn)行數(shù)據(jù)同步時(shí)可達(dá)110000 條/s,數(shù)據(jù)同步耗時(shí)延遲毫秒級(jí)。
表1 氣象大數(shù)據(jù)云平臺(tái)數(shù)據(jù)同步時(shí)效對(duì)比
2020 年6 月,山東省氣象大數(shù)據(jù)云平臺(tái)“天擎”正式完成業(yè)務(wù)部署[4],信息中心搭建了一套800 TB 的結(jié)構(gòu)化分布式存儲(chǔ)環(huán)境。系統(tǒng)自部署以來,累計(jì)接入地面、高空等結(jié)構(gòu)化數(shù)據(jù)100 種,采用了Binlog+Kafka 的數(shù)據(jù)同步技術(shù)將數(shù)據(jù)同步耗時(shí)延遲毫秒級(jí),有效支撐了全省氣象業(yè)務(wù)系統(tǒng)對(duì)海量氣象數(shù)據(jù)的時(shí)效需求。為我省業(yè)務(wù)技術(shù)體制改革,建立“云+端”的業(yè)務(wù)模式新格局奠定重要業(yè)務(wù)基礎(chǔ)。