本公開涉及數據傳輸,尤其涉及一種數據傳輸的稽核方法及裝置、電子設備和存儲介質。
背景技術:
1、隨著計算機技術的發(fā)展,越來越多的企業(yè)采用消息隊列(message?queue,mq)作為企業(yè)it系統(tǒng)內部數據傳輸的核心方式。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能。當前使用較多的消息隊列有rabbitmq、rocketmq、activemq、kafka、zeromq、metamq等。
2、相關技術的數據傳輸技術,在數據傳輸的過程中,通常通過接收方反饋的消息來確定數據傳輸的準確性及數據傳輸是否成功。以kafka數據傳輸為例:kafka傳輸數據時,當數據傳輸到主(leader)節(jié)點且同步到了所有副本中時,生產端(producer)會收到kafka服務器(server)的成功響應。在生產端發(fā)送數據給server端時,若發(fā)生臨時性錯誤,數據無法送達,生產端將會重新發(fā)送,從而保障數據的完整性。
3、雖然相關的消息隊列技術在數據丟失方面作了比較可靠的保障,但在一些特殊場景下也會有數據丟失的情況發(fā)生。例如,以通過kafka進行數據傳輸為例,當發(fā)生以下情況時,容易造成數據丟失:
4、1、組件流程問題:kafka上游段或者下游段發(fā)生數據丟失。
5、2、網絡問題:kafka速率超過了網絡帶寬,一旦發(fā)生發(fā)送失敗情況,并且沒有開重試機制,會導致數據丟失并且無法找回。
6、3、數據大小問題;單批數據大小過長會造成數據丟失。生產者生產的數據大小大于消費者配置的拉取的最大消息大小,遠遠超過了消費者拉取的能力,這條大數據將會被消費失敗,嚴重可以導致kafka卡死,從而造成數據丟失。
7、4、硬盤問題:kafka消息隊列是以日志(log)文件的形式存儲,當出現主機磁盤故障無法恢復數據情況,可能會導致數據丟失。
8、在上述場景下,不但容易造成數據丟失,并且可能會因為沒能及時發(fā)現數據丟失并及時補傳丟失的數據,進而造成丟失的數據無法找回的問題。
技術實現思路
1、本公開提供了一種數據傳輸的稽核方法、裝置、電子設備和存儲介質。其主要目的在于解決數據傳輸過程中容易發(fā)生數據丟失,且可能會因為沒能及時發(fā)現數據丟失并及時補傳丟失的數據,進而造成丟失的數據無法找回的問題。
2、根據本公開的第一方面,提供了一種數據的傳輸方法,其中,包括:
3、基于消息隊列的配置參數,獲取目標傳輸文件的第一名稱及第一文件記錄數,并將所述第一名稱作為鍵,所述第一文件記錄數作為值,寫入第一記錄文件,所述配置參數還包括所述目標傳輸文件的目標分區(qū),所述消息隊列用于將所述目標傳輸文件存儲至所述目標分區(qū),所述第一文件記錄數用于記錄所述目標傳輸文件的發(fā)送數量;
4、從所述目標分區(qū)中獲取所述目標傳輸文件的第二名稱及第二文件記錄數,并將所述第二名稱及第二文件記錄數寫入第二記錄文件,所述第二文件記錄數用于記錄所述目標傳輸文件的接收數量;
5、讀取所述第二記錄文件,以所述第二名稱為鍵,以所述第二文件記錄數為值,存放在哈希函數中,所述哈希函數以鍵值對方式存儲;
6、讀取所述第一記錄文件,比對第一記錄文件中的鍵值對的值與所述哈希函數中的鍵值對的值,根據比對結果確定數據的傳輸是否存在異常。
7、可選地,在基于消息隊列的配置參數,獲取目標傳輸文件的第一名稱及第一文件記錄數之前,所述方法還包括:
8、采用爭搶模式將所述待傳輸文件從輸入目錄轉移至臨時目錄,并添加到消息隊列中;
9、從消息隊列中讀取所述待傳輸文件的文件名稱及文件內容,并將所述待傳輸文件的大小、路徑、臨時目錄及備份目錄確定為文件信息;
10、以所述待傳輸文件對應的文件名稱作為鍵,拼接所述待傳輸文件對應的文件內容及文件信息的作為值的方式,對所述待傳輸文件進行封裝打包,得到所述目標傳輸文件。
11、可選地,在所述得到所述目標傳輸文件之后,所述方法還包括:
12、基于所述配置參數中的目標分區(qū),將所述目標傳輸文件發(fā)送至所述目標分區(qū),并確定發(fā)送至所述目標分區(qū)的目標傳輸文件的目標數量。
13、可選地,所述基于消息隊列的輸入端配置參數,獲取目標傳輸文件的第一名稱及第一文件記錄數,并將所述第一名稱作為鍵,所述第一文件記錄數作為值,寫入第一記錄文件,包括:
14、將所述目標數量確定為所述目標傳輸文件的第一文件記錄數;
15、將所述第一名稱作為鍵,所述第一文件記錄數作為值,寫入所述第一記錄文件;
16、在接收到所述第一記錄文件的記錄信號后,確定完成目標傳輸文件的發(fā)送,所述記錄信號用于確定完成所述第一名稱及所述第一文件記錄數的寫入。
17、可選地,所述讀取所述第一記錄文件,比對第一記錄文件中的鍵值對的值與所述哈希函數中的鍵值對的值,根據比對結果確定數據的傳輸是否存在異常,包括:
18、遍歷所述第一記錄文件,在所述哈希函數中查找與第一記錄文件中相同的鍵,并將所述哈希函數中相同的鍵確定為目標鍵;
19、在確定所述目標鍵之后,判斷所述目標鍵的值與所述第一記錄文件中的值的數值是否一致;
20、根據所述目標鍵的值與所述第一記錄文件中的值的數值的比對結果,確定數據傳輸是否存在異常。
21、可選地,所述根據比對結果確定數據傳輸是否存在異常,包括:
22、若確定所述第一記錄文件中的鍵在哈希函數中不存在,則將所述第一記錄文件中的鍵確定為異常鍵,并將所述異常鍵對應的第二文件記錄數確定為0;
23、若確定所述目標鍵的值與所述第一記錄文件中的值的數值一致,則確定數據傳輸正常;
24、若確定所述目標鍵的值與所述第一記錄文件中的值的數值不一致,則確定數據傳輸異常;
25、將所述異常鍵及數據傳輸異常的目標鍵對應的目標傳輸文件確定為異常文件;
26、輸出所述異常文件對應的第一名稱、第一文件記錄數及第二文件記錄數。
27、可選地,所述方法還包括:
28、在確定異常文件之后,獲取所述異常文件對應的備份文件,并重新傳輸所述備份文件。
29、根據本公開的第二方面,提供了一種數據的傳輸裝置,包括:
30、第一寫入單元,用于基于消息隊列的配置參數,獲取目標傳輸文件的第一名稱及第一文件記錄數,并將所述第一名稱作為鍵,所述第一文件記錄數作為值,寫入第一記錄文件,所述配置參數還包括所述目標傳輸文件的目標分區(qū),所述消息隊列用于將所述目標傳輸文件存儲至所述目標分區(qū),所述第一文件記錄數用于記錄所述目標傳輸文件的發(fā)送數量;
31、第二寫入單元,用于從所述目標分區(qū)中獲取所述目標傳輸文件的第二名稱及第二文件記錄數,并將所述第二名稱及第二文件記錄數寫入第二記錄文件,所述第二文件記錄數用于記錄所述目標傳輸文件的接收數量;
32、存放單元,用于讀取所述第二記錄文件,以所述第二名稱為鍵,以所述第二文件記錄數為值,存放在哈希函數中,所述哈希函數以鍵值對方式存儲;
33、比對單元,用于讀取所述第一記錄文件,比對第一記錄文件中的鍵值對的值與所述哈希函數中的鍵值對的值,根據比對結果確定數據的傳輸是否存在異常。
34、可選地,所述裝置還包括封裝單元,所述封裝單元包括:
35、添加模塊,用于在基于消息隊列的配置參數,獲取目標傳輸文件的第一名稱及第一文件記錄數之前,采用爭搶模式將所述待傳輸文件從輸入目錄轉移至臨時目錄,并添加到消息隊列中;
36、讀取模塊,用于從消息隊列中讀取所述待傳輸文件的文件名稱及文件內容,并將所述待傳輸文件的大小、路徑、臨時目錄及備份目錄確定為文件信息;
37、封裝模塊,用于以所述待傳輸文件對應的文件名稱作為鍵,拼接所述待傳輸文件對應的文件內容及文件信息的作為值的方式,對所述待傳輸文件進行封裝打包,得到所述目標傳輸文件。
38、可選地,所述裝置還包括發(fā)送單元,所述發(fā)送單元用于:
39、在所述得到所述目標傳輸文件之后,基于所述配置參數中的目標分區(qū),將所述目標傳輸文件發(fā)送至所述目標分區(qū),并確定發(fā)送至所述目標分區(qū)的目標傳輸文件的目標數量。
40、可選地,所述第一寫入單元包括:
41、第一確定模塊,用于將所述目標數量確定為所述目標傳輸文件的第一文件記錄數;
42、寫入模塊,用于將所述第一名稱作為鍵,所述第一文件記錄數作為值,寫入所述第一記錄文件;
43、第二確定模塊,用于在接收到所述第一記錄文件的記錄信號后,確定完成目標傳輸文件的發(fā)送,所述記錄信號用于確定完成所述第一名稱及所述第一文件記錄數的寫入。
44、可選地,所述比對單元包括:
45、查找模塊,用于遍歷所述第一記錄文件,在所述哈希函數中查找與第一記錄文件中相同的鍵,并將所述哈希函數中相同的鍵確定為目標鍵;
46、判斷模塊,用于在確定所述目標鍵之后,判斷所述目標鍵的值與所述第一記錄文件中的值的數值是否一致;
47、第三確定模塊,用于根據所述目標鍵的值與所述第一記錄文件中的值的數值的比對結果,確定數據傳輸是否存在異常。
48、可選地,所述比對單元還包括:
49、第四確定模塊,用于若確定所述第一記錄文件中的鍵在哈希函數中不存在,則將所述第一記錄文件中的鍵確定為異常鍵,并將所述異常鍵對應的第二文件記錄數確定為0;
50、第五確定模塊,用于若確定所述目標鍵的值與所述第一記錄文件中的值的數值一致,則確定數據傳輸正常;
51、第六確定模塊,用于若確定所述目標鍵的值與所述第一記錄文件中的值的數值不一致,則確定數據傳輸異常;
52、第七確定模塊,用于將所述異常鍵及數據傳輸異常的目標鍵對應的目標傳輸文件確定為異常文件;
53、輸出模塊,用于輸出所述異常文件對應的第一名稱、第一文件記錄數及第二文件記錄數。
54、可選地,所述裝置還包括重新傳輸單元,用于:
55、在確定異常文件之后,獲取所述異常文件對應的備份文件,并重新傳輸所述備份文件。
56、根據本公開的第三方面,提供了一種電子設備,包括:
57、至少一個處理器;以及
58、與所述至少一個處理器通信連接的存儲器;其中,
59、所述存儲器存儲有可被所述至少一個處理器執(zhí)行的指令,所述指令被所述至少一個處理器執(zhí)行,以使所述至少一個處理器能夠執(zhí)行前述第一方面所述的方法。
60、根據本公開的第四方面,提供了一種存儲有計算機指令的非瞬時計算機可讀存儲介質,其中,所述計算機指令用于使所述計算機執(zhí)行前述第一方面所述的方法。
61、根據本公開的第五方面,提供了一種計算機程序產品,包括計算機程序,所述計算機程序在被處理器執(zhí)行時實現如前述第一方面所述的方法。
62、本公開提供的數據的傳輸方法及裝置、電子設備和存儲介質,基于消息隊列的配置參數,獲取目標傳輸文件的第一名稱及第一文件記錄數,并將所述第一名稱作為鍵,所述第一文件記錄數作為值,寫入第一記錄文件,所述配置參數還包括所述目標傳輸文件的目標分區(qū),所述消息隊列用于將所述目標傳輸文件存儲至所述目標分區(qū),所述第一文件記錄數用于記錄所述目標傳輸文件的發(fā)送數量;從所述目標分區(qū)中獲取所述目標傳輸文件的第二名稱及第二文件記錄數,并將所述第二名稱及第二文件記錄數寫入第二記錄文件,所述第二文件記錄數用于記錄所述目標傳輸文件的接收數量;讀取所述第二記錄文件,以所述第二名稱為鍵,以所述第二文件記錄數為值,存放在哈希函數中,所述哈希函數以鍵值對方式存儲;讀取所述第一記錄文件,比對第一記錄文件中的鍵值對的值與所述哈希函數中的鍵值對的值,根據比對結果確定數據的傳輸是否存在異常。本公開提供的數據傳輸方法,通過第一記錄文件和第二記錄文件記錄數據傳輸前后的文件記錄數,并通過比對鍵值對的值的方式進行比對,邏輯簡單且容易實現,對網絡、終端的依賴性較低,檢測效率高,可實現及時發(fā)現數據傳輸過程中的丟失的數據,并進行重新上傳,提高數據傳輸的準確率,解決了數據傳輸過程容易發(fā)生數據丟失的問題。應當理解,本部分所描述的內容并非旨在標識本技術的實施例的關鍵或重要特征,也不用于限制本技術的范圍。本技術的其它特征將通過以下的說明書而變得容易理解。