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