本發(fā)明涉及數(shù)據(jù)同步,具體地,涉及一種基于flink?cdc的可配置式大數(shù)據(jù)導(dǎo)入方法及系統(tǒng)。
背景技術(shù):
1、flink?cdc基于apache?flink,具有高性能、高吞吐量和低延遲的數(shù)據(jù)處理能力,能夠?qū)崟r(shí)捕捉到數(shù)據(jù)源的變更,確保導(dǎo)入的數(shù)據(jù)是最新和最準(zhǔn)確的。但是在數(shù)據(jù)源產(chǎn)生變化、數(shù)據(jù)處理邏輯變化、目標(biāo)數(shù)據(jù)庫產(chǎn)生變化等情況時(shí),開發(fā)人員每次變動(dòng)都需要考慮重新基于flink?cdc框架進(jìn)行開發(fā),兼容不同的變化邏輯處理,并重新提交flink任務(wù)。產(chǎn)生大量的維護(hù)和測(cè)試工作量,定制化的兼容邏輯也會(huì)降低系統(tǒng)的靈活性和可擴(kuò)展性。
2、綜上可知,現(xiàn)有相關(guān)技術(shù)中存在以下缺陷:傳統(tǒng)的基于flink?cdc的導(dǎo)入系統(tǒng)可能缺乏靈活性,難以適應(yīng)特定業(yè)務(wù)場(chǎng)景的需求,在處理不同數(shù)據(jù)源和目標(biāo),以及復(fù)雜的數(shù)據(jù)轉(zhuǎn)換和處理邏輯時(shí),可能需要額外的開發(fā)工作來定制化系統(tǒng),導(dǎo)致傳統(tǒng)系統(tǒng)的可擴(kuò)展性較差,無法靈活快速地進(jìn)行變更兼容。簡(jiǎn)單的flink?cdc導(dǎo)入系統(tǒng)不支持復(fù)雜的配置管理,特別是隨著數(shù)據(jù)量的爆炸式增長(zhǎng)和數(shù)據(jù)實(shí)時(shí)性要求的進(jìn)一步提高,在復(fù)雜場(chǎng)景下,進(jìn)行數(shù)據(jù)轉(zhuǎn)換和清洗的效率需要相應(yīng)提升以減少重復(fù)工作和上手難度,降低維護(hù)成本和管理的時(shí)間成本。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種基于flink?cdc的可配置式大數(shù)據(jù)導(dǎo)入方法及系統(tǒng)。
2、根據(jù)本發(fā)明提供的一種基于flink?cdc的可配置式大數(shù)據(jù)導(dǎo)入方法及系統(tǒng),所述方案如下:
3、第一方面,提供了一種基于flink?cdc的可配置式大數(shù)據(jù)導(dǎo)入方法,所述方法包括:
4、步驟s1:對(duì)于系統(tǒng)新增的導(dǎo)入任務(wù),設(shè)置配置信息,進(jìn)行任務(wù)導(dǎo)入的流程配置;
5、步驟s2:用戶flink程序根據(jù)步驟s1中的配置信息生成可執(zhí)行的用戶程序代碼,提交到flink集群上執(zhí)行用戶程序;
6、步驟s3:flink集群內(nèi)部根據(jù)指定的執(zhí)行類調(diào)用用戶程序代碼執(zhí)行,完成數(shù)據(jù)的導(dǎo)入操作;
7、其中,所述步驟s3先讀取并解析任務(wù)導(dǎo)入流程配置信息,驗(yàn)證任務(wù)流程配置是否正確,然后進(jìn)行數(shù)據(jù)實(shí)時(shí)采集,解析、組裝并返回?cái)?shù)據(jù),再對(duì)數(shù)據(jù)進(jìn)行過濾和邏輯處理,最后將處理后的數(shù)據(jù)下沉到指定存儲(chǔ)介質(zhì),并進(jìn)行作業(yè)流程的異常處理。
8、優(yōu)選地,所述步驟s1包括:
9、步驟s1.1:配置主任務(wù)取值邏輯,具體包括:主表數(shù)據(jù)源連接配置、主表取值邏輯配置、主表過濾條件配置、主表數(shù)據(jù)處理邏輯配置、自定義窗口配置以及目標(biāo)數(shù)據(jù)庫配置;
10、步驟s1.2:配置子表取值邏輯,包括:子表數(shù)據(jù)源配置、與主表的映射字段配置、數(shù)據(jù)組裝配置以及子表取值sql配置,此外,還配置了與主任務(wù)配置表的關(guān)聯(lián)id,通過主任務(wù)id能夠查詢對(duì)應(yīng)子表的取值邏輯配置信息;
11、步驟s1.3:上述步驟s1.2流程中如果配置了子表的取值邏輯,并且如果子表發(fā)生了變更,結(jié)果數(shù)據(jù)若也需變更,則需要在子表動(dòng)態(tài)監(jiān)聽表中配置子表的增量動(dòng)態(tài)監(jiān)聽,包括:子表數(shù)據(jù)源配置、子表名稱、監(jiān)聽字段以及關(guān)聯(lián)字段配置,此外,還配置了與主任務(wù)配置表的關(guān)聯(lián)id,通過主任務(wù)id能夠查詢對(duì)應(yīng)子表的監(jiān)聽配置信息;
12、步驟s1.4:配置任務(wù)組,包括組id和任務(wù)id配置;其中,組id配置:在任務(wù)組配置表中配置組id,用于作業(yè)啟動(dòng)的入?yún)?,根?jù)組id去查找對(duì)應(yīng)的任務(wù)配置列表;
13、任務(wù)id配置:在任務(wù)組配置表中該組下的任務(wù)id,規(guī)定一個(gè)導(dǎo)入需求下的所有任務(wù)配置在一個(gè)組中。
14、優(yōu)選地,所述步驟s1.1中,配置主任務(wù)取值邏輯包括:
15、主表數(shù)據(jù)源連接配置:在主任務(wù)配置表中配置主表對(duì)應(yīng)的數(shù)據(jù)源連接信息,實(shí)現(xiàn)在flink程序中source數(shù)據(jù)源的連接;
16、主表取值邏輯配置:在主任務(wù)配置表中配置需要查詢字段、監(jiān)聽字段、取值路徑信息;
17、主表過濾條件配置:在主任務(wù)配置表中配置對(duì)主表數(shù)據(jù)的過濾條件;
18、主表數(shù)據(jù)處理邏輯配置:在主任務(wù)配置表中配置需要進(jìn)行特殊處理的字段,包含:數(shù)據(jù)格式轉(zhuǎn)換、字典映射取值、lua腳本、指定算法的字段加解密以及與目標(biāo)表的字段名映射;
19、自定義窗口配置:任務(wù)的導(dǎo)入實(shí)現(xiàn)通過flink程序讀取任務(wù)配置表,根據(jù)配置信息生成可執(zhí)行代碼完成導(dǎo)入操作;
20、目標(biāo)數(shù)據(jù)庫配置:在主任務(wù)配置表中配置數(shù)據(jù)需要導(dǎo)入的目標(biāo)數(shù)據(jù)庫信息,主要包括:數(shù)據(jù)庫連接信息、導(dǎo)入表名以及導(dǎo)入字段。
21、優(yōu)選地,所述步驟s1.2中配置子表取值邏輯,包括:
22、子表數(shù)據(jù)源配置:在子任務(wù)配置表中配置子表的數(shù)據(jù)源連接信息,用于連接子表的數(shù)據(jù)源,進(jìn)行后續(xù)的sql操作;
23、與主表的映射字段配置:在子任務(wù)配置表中配置與主表的映射字段,用于讀取主表對(duì)應(yīng)數(shù)據(jù),作為子表取值sql的入?yún)ⅲ?/p>
24、數(shù)據(jù)組裝配置:在子任務(wù)配置表中配置與主表的數(shù)據(jù)組裝方式,即直接嵌套在主數(shù)據(jù)中或進(jìn)行平鋪;
25、子表取值sql配置:在子任務(wù)配置表中配置子表的取值邏輯sql,用于獲取主表對(duì)應(yīng)的子表數(shù)據(jù),補(bǔ)充子表的導(dǎo)入邏輯。
26、優(yōu)選地,所述步驟s1.3中子表動(dòng)態(tài)監(jiān)聽配置,包括:
27、子表數(shù)據(jù)源配置:在子表動(dòng)態(tài)監(jiān)聽表中配置子表的數(shù)據(jù)源連接信息,用于連接子表的數(shù)據(jù)源,為子表的cdc連接器提供連接參數(shù)配置;
28、子表名稱:在子表動(dòng)態(tài)監(jiān)聽表中配置需要?jiǎng)討B(tài)監(jiān)聽變更的子表的表名;
29、監(jiān)聽字段:在子表動(dòng)態(tài)監(jiān)聽表中配置需要?jiǎng)討B(tài)監(jiān)聽數(shù)據(jù)變化的字段;
30、關(guān)聯(lián)字段配置:在子表動(dòng)態(tài)監(jiān)聽表中配置與主表的關(guān)聯(lián)字段,用于與主要表的關(guān)聯(lián)查詢。
31、優(yōu)選地,所述步驟s2包括:
32、步驟s2.1:上傳用戶程序jar包,指定執(zhí)行主類;包括:用戶flink程序根據(jù)步驟s1中的配置信息生成可執(zhí)行的程序代碼,然后將用戶程序構(gòu)建成jar文件格式;在flink客戶端-任務(wù)提交頁面通過上傳jar包操作將jar上傳;上傳成功后,在對(duì)應(yīng)的jar文件列表中找到上傳文件,在對(duì)應(yīng)的作業(yè)提交表單中,指定用戶程序執(zhí)行主類entry?class;
33、步驟s2.2:指定要啟動(dòng)的組id;在步驟s2.1作業(yè)提交表單中,指定要啟動(dòng)的任務(wù)組id,用于查找對(duì)應(yīng)的任務(wù)列表,然后進(jìn)行任務(wù)的操作,在啟動(dòng)命令中通過參數(shù)groupid執(zhí)行;
34、步驟s2.3:指定數(shù)據(jù)抽取模式:全量、增量;在步驟s2.1作業(yè)提交表單中,指定任務(wù)的抽取模式:全量或增量,初次啟動(dòng)或者重刷數(shù)據(jù)為全量,其它情況為增量,在啟動(dòng)命令中通過參數(shù)startupoption指定;
35、步驟s2.4:設(shè)定作業(yè)并行度;在步驟s2.1作業(yè)提交表單中,指定任務(wù)的并行度parallelism;
36、步驟s2.5:通過命令啟動(dòng)執(zhí)行用戶程序;在步驟s2.1作業(yè)提交表單中,指定啟動(dòng)命令,通過flink?run命令啟動(dòng),執(zhí)行用戶程序。
37、優(yōu)選地,所述步驟s3包括:
38、步驟s3.1:校驗(yàn)配置信息,若正確,執(zhí)行步驟s3.2;若不正確,直接拋出異常,將詳細(xì)報(bào)錯(cuò)信息打印在日志文件中;異常重試指定次數(shù)失敗后,flink作業(yè)直接停止;
39、步驟s3.2:獲取source數(shù)據(jù)源配置,構(gòu)建source,連接到指定的數(shù)據(jù)源,進(jìn)行數(shù)據(jù)的實(shí)時(shí)采集;
40、步驟s3.3:獲取source的配置信息,構(gòu)建flatmap,進(jìn)行數(shù)據(jù)的解析、組裝并返回;
41、步驟s3.4:如果任務(wù)配置了過濾條件表達(dá)式,構(gòu)建filter算子,對(duì)source數(shù)據(jù)流過濾處理;
42、步驟s3.5:獲取配置的窗口參數(shù),通過實(shí)現(xiàn)flink內(nèi)部的抽象類和接口構(gòu)建keyby、window、trigger算子,生成自定義窗口;
43、步驟s3.6:獲取數(shù)據(jù)邏輯處理配置,包含子表的取值邏輯配置以及主表的數(shù)據(jù)處理邏輯配置,通過實(shí)現(xiàn)flink內(nèi)部processwindowfunction抽象類構(gòu)建processfunction函數(shù),在窗口函數(shù)內(nèi)對(duì)數(shù)據(jù)進(jìn)行邏輯處理;
44、步驟s3.7:獲取sink相關(guān)配置信息,構(gòu)建sink,連接sink數(shù)據(jù)源,將處理后的數(shù)據(jù)下沉到指定存儲(chǔ)介質(zhì);
45、步驟s3.8:進(jìn)行作業(yè)流程異常處理;在flink作業(yè)構(gòu)建過程中,對(duì)每個(gè)流程進(jìn)行異常捕獲;如果當(dāng)前流程構(gòu)建異常,則針對(duì)當(dāng)前異常先進(jìn)行異常捕獲,獲取發(fā)生異常流程位置以及異常詳細(xì)信息再拋出異常;
46、步驟s3.9:job運(yùn)行異常重試;步驟s3.8中用戶程序發(fā)生異常會(huì)繼續(xù)拋出造成整個(gè)flink?job運(yùn)行異常,當(dāng)flink?job異常時(shí),觸發(fā)異常重試機(jī)制;
47、flink程序提交過程中指定job運(yùn)行操作重試策略,通過setrestartstrategy方法指定,包括:固定間隔重啟策略、故障失敗率重啟策略、無重啟,默認(rèn)為固定間隔重啟策略。
48、優(yōu)選地,所述步驟s3.3包括:
49、步驟s3.3.1:獲取sourceconfig配置信息,根據(jù)配置路徑解析獲取數(shù)據(jù)流;
50、步驟s3.3.2:根據(jù)配置監(jiān)聽字段,獲取監(jiān)聽字段前后變化值信息;
51、步驟s3.3.3:根據(jù)配置返回字段,對(duì)數(shù)據(jù)源字段進(jìn)行過濾返回;
52、步驟s3.3.4:針對(duì)物理刪除場(chǎng)景,設(shè)置邏輯刪除標(biāo)識(shí)符flag=1,用于下游業(yè)務(wù)邏輯處理。
53、優(yōu)選地,所述步驟s3.6包括:
54、步驟s3.6.1:獲取子表數(shù)據(jù)邏輯取值處理;從子表取值邏輯配置表獲取子表取值邏輯sql,根據(jù)關(guān)聯(lián)字段取值進(jìn)行參數(shù)填充,連接到子表數(shù)據(jù)源,執(zhí)行sql語句,獲取結(jié)果組裝到源表數(shù)據(jù)中往下傳遞進(jìn)行數(shù)據(jù)處理;
55、步驟s3.6.2:獲取數(shù)據(jù)格式化配置,針對(duì)不同的配置完成數(shù)據(jù)格式的轉(zhuǎn)化;
56、步驟s3.6.3:獲取lua腳本配置,通過luavalue解析腳本并執(zhí)行;
57、步驟s3.6.4:獲取字段映射配置,根據(jù)源表字段獲取對(duì)應(yīng)的屬性值,賦值給映射后的字段這種,然后將映射后的字段填充到數(shù)據(jù)流中;
58、步驟s3.6.5:獲取新增字段配置,根據(jù)新增字段的取值邏輯,從數(shù)據(jù)流中獲取對(duì)應(yīng)的值賦值給新增字段,然后將新增字段再填充到數(shù)據(jù)流中。
59、第二方面,提供了一種基于flink?cdc的可配置式大數(shù)據(jù)導(dǎo)入系統(tǒng),所述系統(tǒng)包括:
60、模塊m1:對(duì)于系統(tǒng)新增的導(dǎo)入任務(wù),設(shè)置配置信息,進(jìn)行任務(wù)導(dǎo)入的流程配置;
61、模塊m2:用戶flink程序根據(jù)模塊m1中的配置信息生成可執(zhí)行的用戶程序代碼,提交到flink集群上執(zhí)行用戶程序;
62、模塊m3:flink集群內(nèi)部根據(jù)指定的執(zhí)行類調(diào)用用戶程序代碼執(zhí)行,完成數(shù)據(jù)的導(dǎo)入操作;
63、其中,所述模塊m3先讀取并解析任務(wù)導(dǎo)入流程配置信息,驗(yàn)證任務(wù)流程配置是否正確,然后進(jìn)行數(shù)據(jù)實(shí)時(shí)采集,解析、組裝并返回?cái)?shù)據(jù),再對(duì)數(shù)據(jù)進(jìn)行過濾和邏輯處理,最后將處理后的數(shù)據(jù)下沉到指定存儲(chǔ)介質(zhì),并進(jìn)行作業(yè)流程的異常處理。
64、與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
65、1、本發(fā)明提供了更靈活的配置選項(xiàng),允許用戶根據(jù)特定需求調(diào)整數(shù)據(jù)導(dǎo)入流程,無需重復(fù)開發(fā)。例如,可以自定義數(shù)據(jù)轉(zhuǎn)換邏輯、加載策略、錯(cuò)誤處理等。對(duì)于各種異構(gòu)數(shù)據(jù)源的數(shù)據(jù)處理邏輯變化的兼容性更高,能夠適應(yīng)不同數(shù)據(jù)源和不同規(guī)模的數(shù)據(jù)導(dǎo)入需求,提高了系統(tǒng)的靈活性和擴(kuò)展性。
66、2、本發(fā)明可以更好地利用flink的動(dòng)態(tài)縮放特性,根據(jù)實(shí)際負(fù)載自動(dòng)調(diào)整資源分配,通過精確的時(shí)間戳和事務(wù)id,可配置式系統(tǒng)能夠保證數(shù)據(jù)的一致性和可靠性。
67、3、本發(fā)明可以在故障發(fā)生時(shí)自動(dòng)切換到配置的備份路徑或采取其他恢復(fù)措施,減少停機(jī)時(shí)間,提供更加完善的異常數(shù)據(jù)處理流程和分析解決方案。
68、本發(fā)明的其他有益效果,將在具體實(shí)施方式中通過具體技術(shù)特征和技術(shù)方案的介紹來闡述,本領(lǐng)域技術(shù)人員通過這些技術(shù)特征和技術(shù)方案的介紹,應(yīng)能理解所述技術(shù)特征和技術(shù)方案帶來的有益技術(shù)效果。