本發(fā)明涉及數(shù)據(jù)同步領(lǐng)域,特別涉及一種數(shù)據(jù)同步方法、裝置、設(shè)備及介質(zhì)。
背景技術(shù):
1、在當(dāng)前的數(shù)據(jù)業(yè)務(wù)中,數(shù)據(jù)均持久化存儲(chǔ)于各業(yè)務(wù)系統(tǒng)的mysql數(shù)據(jù)庫中??紤]到mysql數(shù)據(jù)庫的局限性,需要將mysql數(shù)據(jù)庫中的數(shù)據(jù)同步至其他數(shù)據(jù)庫,以滿足不同應(yīng)用場(chǎng)景的使用,例如同步到hive、tidb、kudu、hbase、elasticsearch等數(shù)據(jù)庫中。
2、而在數(shù)據(jù)同步的過程中常涉及到數(shù)據(jù)過濾機(jī)制,目前的數(shù)據(jù)過濾機(jī)制通常為在canal服務(wù)端的啟動(dòng)配置文件中配置數(shù)據(jù)過濾名單,以基于數(shù)據(jù)過濾名單對(duì)從mysql數(shù)據(jù)庫中獲取的數(shù)據(jù)進(jìn)行過濾,然后將過濾后的數(shù)據(jù)同步至其他數(shù)據(jù)庫。但如需對(duì)數(shù)據(jù)過濾名單進(jìn)行變更,由于數(shù)據(jù)過濾名單存儲(chǔ)于canal服務(wù)端的啟動(dòng)配置文件中,因此在數(shù)據(jù)過濾名單變更后需要重啟canal服務(wù)端,或者增加部署用于為canal中間件提供整體配置管理和節(jié)點(diǎn)運(yùn)維等功能的canal-admin,以通過canal-admin對(duì)數(shù)據(jù)過濾名單進(jìn)行重加載配置。然而上述兩種方式都是重量級(jí)操作,在重啟或重加載配置的過程中會(huì)嚴(yán)重影響到數(shù)據(jù)的同步,并且canal服務(wù)端在實(shí)際的工作中需要穩(wěn)定運(yùn)行,很少會(huì)重啟。因此,如何在不需要重啟canal服務(wù)端的情況下,實(shí)現(xiàn)數(shù)據(jù)的同步是目前有待解決的問題。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明的目的在于提供一種數(shù)據(jù)同步方法、裝置、設(shè)備及介質(zhì),能夠在不需要重啟canal服務(wù)端的情況下實(shí)現(xiàn)對(duì)數(shù)據(jù)同步過濾文件的動(dòng)態(tài)變更,并且實(shí)現(xiàn)對(duì)不同下游數(shù)據(jù)庫系統(tǒng)的差異化數(shù)據(jù)同步。其具體方案如下:
2、第一方面,本技術(shù)提供了一種數(shù)據(jù)同步方法,應(yīng)用于集成有若干canal客戶端的數(shù)據(jù)同步服務(wù),不同的canal客戶端對(duì)應(yīng)不同的下游數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)同步過濾文件;其中,所述方法包括:
3、在將預(yù)設(shè)持久化存儲(chǔ)中與任一canal客戶端對(duì)應(yīng)的目標(biāo)數(shù)據(jù)同步過濾文件加載至本地的預(yù)設(shè)內(nèi)存中之后,基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以得到過濾后數(shù)據(jù);其中,所述服務(wù)端隊(duì)列中的數(shù)據(jù)為所述canal服務(wù)端從上游數(shù)據(jù)庫系統(tǒng)中獲取的數(shù)據(jù);
4、將所述過濾后數(shù)據(jù)發(fā)送至所述任一canal客戶端對(duì)應(yīng)的目標(biāo)客戶端隊(duì)列中進(jìn)行存儲(chǔ),以便所述任一canal客戶端將所述目標(biāo)客戶端隊(duì)列中存儲(chǔ)的數(shù)據(jù)同步至所述任一canal客戶端對(duì)應(yīng)的目標(biāo)下游數(shù)據(jù)庫系統(tǒng);
5、若通過文件配置頁面中的第一預(yù)設(shè)接口獲取到針對(duì)所述目標(biāo)數(shù)據(jù)同步過濾文件的變更請(qǐng)求,則基于所述變更請(qǐng)求對(duì)所述預(yù)設(shè)持久化存儲(chǔ)中的所述目標(biāo)數(shù)據(jù)同步過濾文件進(jìn)行變更,并將變更后的數(shù)據(jù)同步過濾文件重新加載至所述預(yù)設(shè)內(nèi)存中,以便基于所述變更后的數(shù)據(jù)同步過濾文件對(duì)所述待同步數(shù)據(jù)進(jìn)行過濾。
6、可選的,所述基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,包括:
7、通過所述任一canal客戶端在所述數(shù)據(jù)同步服務(wù)中創(chuàng)建的目標(biāo)對(duì)象從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取待同步數(shù)據(jù),并基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)所述待同步數(shù)據(jù)進(jìn)行過濾。
8、可選的,所述通過所述任一canal客戶端在所述數(shù)據(jù)同步服務(wù)中創(chuàng)建的目標(biāo)對(duì)象從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取待同步數(shù)據(jù)之前,還包括:
9、調(diào)用所述任一canal客戶端的第二預(yù)設(shè)接口在所述數(shù)據(jù)同步服務(wù)中創(chuàng)建相應(yīng)的所述目標(biāo)對(duì)象;其中,不同的canal客戶端對(duì)應(yīng)不同的對(duì)象。
10、可選的,所述服務(wù)端隊(duì)列中的數(shù)據(jù)為所述canal服務(wù)端發(fā)送至所述服務(wù)端隊(duì)列進(jìn)行存儲(chǔ)的數(shù)據(jù);所述canal服務(wù)端發(fā)送至所述服務(wù)端隊(duì)列進(jìn)行存儲(chǔ)的數(shù)據(jù)為所述canal服務(wù)端對(duì)所述上游數(shù)據(jù)庫系統(tǒng)發(fā)送的數(shù)據(jù)變更日志進(jìn)行解析后得到的數(shù)據(jù);所述數(shù)據(jù)變更日志為所述上游數(shù)據(jù)庫系統(tǒng)在接收到所述canal服務(wù)端發(fā)送的日志請(qǐng)求時(shí)基于主從同步機(jī)制同步至所述canal服務(wù)端的日志。
11、可選的,所述基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以得到過濾后數(shù)據(jù),包括:
12、基于所述目標(biāo)數(shù)據(jù)同步過濾文件中的數(shù)據(jù)白名單對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以從所述待同步數(shù)據(jù)中確定出與所述數(shù)據(jù)白名單對(duì)應(yīng)的過濾后數(shù)據(jù);
13、其中,所述數(shù)據(jù)白名單包括數(shù)據(jù)庫白名單、數(shù)據(jù)表白名單和數(shù)據(jù)字段白名單中的任意一種或幾種的組合。
14、可選的,所述基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以得到過濾后數(shù)據(jù),包括:
15、基于所述目標(biāo)數(shù)據(jù)同步過濾文件中的數(shù)據(jù)黑名單對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以從所述待同步數(shù)據(jù)中刪除與所述數(shù)據(jù)黑名單對(duì)應(yīng)的數(shù)據(jù),并基于所述待同步數(shù)據(jù)中的剩余數(shù)據(jù)確定過濾后數(shù)據(jù);
16、其中,所述數(shù)據(jù)黑名單包括數(shù)據(jù)庫黑名單、數(shù)據(jù)表黑名單和數(shù)據(jù)字段黑名單中的任意一種或幾種的組合。
17、可選的,所述基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以得到過濾后數(shù)據(jù),包括:
18、從所述canal服務(wù)端對(duì)應(yīng)的所述服務(wù)端隊(duì)列中獲取所述待同步數(shù)據(jù),若所述待同步數(shù)據(jù)的數(shù)量為多個(gè),則將所述待同步數(shù)據(jù)中的第一個(gè)數(shù)據(jù)確定為當(dāng)前待同步數(shù)據(jù),并基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)所述當(dāng)前待同步數(shù)據(jù)進(jìn)行過濾,以得到當(dāng)前過濾后數(shù)據(jù),以便將所述當(dāng)前過濾后數(shù)據(jù)發(fā)送至所述目標(biāo)客戶端隊(duì)列中進(jìn)行存儲(chǔ);
19、判斷所述當(dāng)前待同步數(shù)據(jù)是否為所述待同步數(shù)據(jù)中的最后一個(gè)數(shù)據(jù),若否,則將所述待同步數(shù)據(jù)中的下一個(gè)數(shù)據(jù)確定為新的當(dāng)前待同步數(shù)據(jù),并重新跳轉(zhuǎn)至所述基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)所述當(dāng)前待同步數(shù)據(jù)進(jìn)行過濾的步驟,直至所述當(dāng)前待同步數(shù)據(jù)為所述待同步數(shù)據(jù)中的最后一個(gè)數(shù)據(jù),然后從所述服務(wù)端隊(duì)列中獲取新的待同步數(shù)據(jù)。
20、第二方面,本技術(shù)提供了一種數(shù)據(jù)同步裝置,應(yīng)用于集成有若干canal客戶端的數(shù)據(jù)同步服務(wù),不同的canal客戶端對(duì)應(yīng)不同的下游數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)同步過濾文件;其中,所述裝置包括:
21、數(shù)據(jù)過濾模塊,用于在將預(yù)設(shè)持久化存儲(chǔ)中與任一canal客戶端對(duì)應(yīng)的目標(biāo)數(shù)據(jù)同步過濾文件加載至本地的預(yù)設(shè)內(nèi)存中之后,基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以得到過濾后數(shù)據(jù);其中,所述服務(wù)端隊(duì)列中的數(shù)據(jù)為所述canal服務(wù)端從上游數(shù)據(jù)庫系統(tǒng)中獲取的數(shù)據(jù);
22、數(shù)據(jù)同步模塊,用于將所述過濾后數(shù)據(jù)發(fā)送至所述任一canal客戶端對(duì)應(yīng)的目標(biāo)客戶端隊(duì)列中進(jìn)行存儲(chǔ),以便所述任一canal客戶端將所述目標(biāo)客戶端隊(duì)列中存儲(chǔ)的數(shù)據(jù)同步至所述任一canal客戶端對(duì)應(yīng)的目標(biāo)下游數(shù)據(jù)庫系統(tǒng);
23、文件變更模塊,用于若通過文件配置頁面中的第一預(yù)設(shè)接口獲取到針對(duì)所述目標(biāo)數(shù)據(jù)同步過濾文件的變更請(qǐng)求,則基于所述變更請(qǐng)求對(duì)所述預(yù)設(shè)持久化存儲(chǔ)中的所述目標(biāo)數(shù)據(jù)同步過濾文件進(jìn)行變更,并將變更后的數(shù)據(jù)同步過濾文件重新加載至所述預(yù)設(shè)內(nèi)存中,以便基于所述變更后的數(shù)據(jù)同步過濾文件對(duì)所述待同步數(shù)據(jù)進(jìn)行過濾。
24、第三方面,本技術(shù)提供了一種電子設(shè)備,包括:
25、存儲(chǔ)器,用于保存計(jì)算機(jī)程序;
26、處理器,用于執(zhí)行所述計(jì)算機(jī)程序以實(shí)現(xiàn)前述的數(shù)據(jù)同步方法。
27、第四方面,本技術(shù)提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),用于保存計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)前述的數(shù)據(jù)同步方法。
28、本技術(shù)的數(shù)據(jù)同步方法應(yīng)用于集成有若干canal客戶端的數(shù)據(jù)同步服務(wù),不同的canal客戶端對(duì)應(yīng)不同的下游數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)同步過濾文件;其中,所述方法包括:在將預(yù)設(shè)持久化存儲(chǔ)中與任一canal客戶端對(duì)應(yīng)的目標(biāo)數(shù)據(jù)同步過濾文件加載至本地的預(yù)設(shè)內(nèi)存中之后,基于所述目標(biāo)數(shù)據(jù)同步過濾文件對(duì)從canal服務(wù)端對(duì)應(yīng)的服務(wù)端隊(duì)列中獲取的待同步數(shù)據(jù)進(jìn)行過濾,以得到過濾后數(shù)據(jù);其中,所述服務(wù)端隊(duì)列中的數(shù)據(jù)為所述canal服務(wù)端從上游數(shù)據(jù)庫系統(tǒng)中獲取的數(shù)據(jù);將所述過濾后數(shù)據(jù)發(fā)送至所述任一canal客戶端對(duì)應(yīng)的目標(biāo)客戶端隊(duì)列中進(jìn)行存儲(chǔ),以便所述任一canal客戶端將所述目標(biāo)客戶端隊(duì)列中存儲(chǔ)的數(shù)據(jù)同步至所述任一canal客戶端對(duì)應(yīng)的目標(biāo)下游數(shù)據(jù)庫系統(tǒng);若通過文件配置頁面中的第一預(yù)設(shè)接口獲取到針對(duì)所述目標(biāo)數(shù)據(jù)同步過濾文件的變更請(qǐng)求,則基于所述變更請(qǐng)求對(duì)所述預(yù)設(shè)持久化存儲(chǔ)中的所述目標(biāo)數(shù)據(jù)同步過濾文件進(jìn)行變更,并將變更后的數(shù)據(jù)同步過濾文件重新加載至所述預(yù)設(shè)內(nèi)存中,以便基于所述變更后的數(shù)據(jù)同步過濾文件對(duì)所述待同步數(shù)據(jù)進(jìn)行過濾。由此可見,本技術(shù)通過預(yù)先將數(shù)據(jù)同步過濾文件存儲(chǔ)到持久化存儲(chǔ)中,以在基于預(yù)先集成有若干canal客戶端的數(shù)據(jù)同步服務(wù)進(jìn)行數(shù)據(jù)同步時(shí),通過將持久化存儲(chǔ)中的數(shù)據(jù)同步過濾文件加載至數(shù)據(jù)同步服務(wù)的本地內(nèi)存中,以便數(shù)據(jù)同步服務(wù)可以基于本地內(nèi)存中的數(shù)據(jù)同步過濾文件進(jìn)行數(shù)據(jù)過濾,這樣一來,通過將數(shù)據(jù)過濾操作從原本的canal服務(wù)端遷移至集成有若干canal客戶端的數(shù)據(jù)同步服務(wù),可以降低對(duì)canal服務(wù)端的資源消耗;并且,在數(shù)據(jù)同步過濾文件需要變更時(shí),只需通過數(shù)據(jù)同步服務(wù)提供的文件配置頁面中的預(yù)設(shè)接口獲取文件變更請(qǐng)求,便可以實(shí)現(xiàn)對(duì)持久化存儲(chǔ)中的數(shù)據(jù)同步過濾文件的變更,然后將變更后的數(shù)據(jù)同步過濾文件重新加載至數(shù)據(jù)同步服務(wù)的本地內(nèi)存中,這樣一來,可以在不需要重啟canal服務(wù)端的情況下實(shí)現(xiàn)對(duì)數(shù)據(jù)同步過濾文件的動(dòng)態(tài)變更,并且可以基于變更后的數(shù)據(jù)同步過濾文件繼續(xù)對(duì)數(shù)據(jù)進(jìn)行過濾。進(jìn)一步的,由于本技術(shù)中的不同canal客戶端對(duì)應(yīng)于不同下游數(shù)據(jù)庫系統(tǒng)以及不同數(shù)據(jù)同步過濾文件,從而可以通過不同的數(shù)據(jù)同步過濾文件實(shí)現(xiàn)對(duì)不同下游數(shù)據(jù)庫系統(tǒng)的差異化數(shù)據(jù)同步。