目錄
背景
名詞解釋
問題與挑戰(zhàn)
FlinkCDC
DataX
工作原理
調(diào)度流程
五、DataX 3.0六大核心優(yōu)勢
性能優(yōu)化
背景
名詞解釋
CDC
? ? ? ?CDC又稱變更數(shù)據(jù)捕獲(Change Data Capture),開啟cdc的源表在插入INSERT、更新UPDATE和刪除DELETE活動時會插入數(shù)據(jù)到日志表中。CDC通過捕獲進程將變更數(shù)據(jù)捕獲到變更表中,通過cdc提供的查詢函數(shù),我們可以捕獲這部分數(shù)據(jù)。
ETL
? ? ? ?ETL數(shù)據(jù)倉庫技術(Extract-Transform-Load),它是將數(shù)據(jù)從源系統(tǒng)加載到數(shù)據(jù)倉庫的過程。用來描述將數(shù)據(jù)從來源端經(jīng)過萃?。╡xtract)、轉置(transform)、加載(load)至目的端的過程。使用到的工具包含(kettle、flume、sqoop)。
問題與挑戰(zhàn)
CDC乃至數(shù)據(jù)集成領域面臨的技術挑戰(zhàn):
-
歷史數(shù)據(jù)規(guī)模大:數(shù)據(jù)庫的歷史數(shù)據(jù)規(guī)模大,100T+ 規(guī)模很常見
-
增量數(shù)據(jù)實時性要求高:數(shù)據(jù)庫的增量數(shù)據(jù)業(yè)務價值高,且價值隨時間遞減,需要實時處理
-
數(shù)據(jù)的保序性:CDC 數(shù)據(jù)的加工結果通常需要強一致性語義,需要處理工具支持全局保序
-
表結構動態(tài)變化:增量數(shù)據(jù)隨時間增長,數(shù)據(jù)對應的表結構會不斷演進
FlinkCDC
????????Flink CDC 是以 Debezium 作為底層采集工具。Debezium 支持全量同步,也支持增量同步,也支持全量 + 增量的同步,非常靈活,同時基于日志的 CDC 技術使得提供 Exactly-Once 成為可能。
架構設計
????????傳統(tǒng)的CDC ETL鏈路中,采集到的數(shù)據(jù)一般輸出到消息中間件如 Kafka,然后 Flink 計算引擎再去消費這一部分數(shù)據(jù)寫入到目的端,目的端可以是各種 DB,數(shù)據(jù)湖,實時數(shù)倉和離線數(shù)倉等:
Flink CDC
參考:Flink CDC 1.0至3.0回憶錄
DataX
工作原理
DataX本身作為離線數(shù)據(jù)同步框架,采用Framework + plugin架構構建。將數(shù)據(jù)源讀取和寫入抽象成為Reader/Writer插件,納入到整個同步框架中。
- Reader:Reader為數(shù)據(jù)采集模塊,負責采集數(shù)據(jù)源的數(shù)據(jù),將數(shù)據(jù)發(fā)送給Framework。
- Writer: Writer為數(shù)據(jù)寫入模塊,負責不斷向Framework取數(shù)據(jù),并將數(shù)據(jù)寫入到目的端。
- Framework:Framework用于連接reader和writer,作為兩者的數(shù)據(jù)傳輸通道,并處理緩沖,流控,并發(fā),數(shù)據(jù)轉換等核心技術問題。
在講解datax原理之前,需要明確一些概念:
- Job: Job是DataX用以描述從一個源頭到一個目的端的同步作業(yè),是DataX數(shù)據(jù)同步的最小業(yè)務單元。比如:從一張mysql的表同步到hive的一個表的特定分區(qū)。
- Task: Task是為最大化而把Job拆分得到的最小執(zhí)行單元。比如:讀一張有1024個分表的mysql分庫分表的Job,拆分成1024個讀Task,若干個任務并發(fā)執(zhí)行?;蛘邔⒁粋€大表按照id拆分成1024個分片,若干個分片任務并發(fā)執(zhí)行。
- TaskGroup: 描述的是一組Task集合。在同一個TaskGroupContainer執(zhí)行下的Task集合稱之為TaskGroup。
- JobContainer: Job執(zhí)行器,負責Job全局拆分、調(diào)度、前置語句和后置語句等工作的工作單元。
- TaskGroupContainer: TaskGroup執(zhí)行器,負責執(zhí)行一組Task的工作單元。
- job和task是datax兩種維度的抽象,后面源碼分析中還會涉及到。
datax的處理過程可描述為:
- DataX完成單個數(shù)據(jù)同步的作業(yè),我們稱之為Job,DataX接受到一個Job之后,將啟動一個進程來完成整個作業(yè)同步過程。DataX Job模塊是單個作業(yè)的中樞管理節(jié)點,承擔了數(shù)據(jù)清理、子任務切分(將單一作業(yè)計算轉化為多個子Task)、TaskGroup管理等功能。
- DataXJob啟動后,會根據(jù)不同的源端切分策略,將Job切分成多個小的Task(子任務),以便于并發(fā)執(zhí)行。Task便是DataX作業(yè)的最小單元,每一個Task都會負責一部分數(shù)據(jù)的同步工作。
- 切分多個Task之后,DataX Job會調(diào)用Scheduler模塊,根據(jù)配置的并發(fā)數(shù)據(jù)量,將拆分成的Task重新組合,組裝成TaskGroup(任務組)。每一個TaskGroup負責以一定的并發(fā)運行完畢分配好的所有Task,默認單個任務組的并發(fā)數(shù)量為5。
- 每一個Task都由TaskGroup負責啟動,Task啟動后,會固定啟動Reader—>Channel—>Writer的線程來完成任務同步工作。
- DataX作業(yè)運行起來之后, Job監(jiān)控并等待多個TaskGroup模塊任務完成,等待所有TaskGroup任務完成后Job成功退出。否則,異常退出,進程退出值非0。
調(diào)度流程
舉例來說,用戶提交了一個DataX作業(yè),并且配置了20個并發(fā),目的是將一個100張分表的mysql數(shù)據(jù)同步到odps里面。 DataX的調(diào)度決策思路是:
- DataXJob根據(jù)分庫分表切分成了100個Task。
- 根據(jù)20個并發(fā),DataX計算共需要分配4個TaskGroup(默認單個任務組的并發(fā)數(shù)量為5)。
- 4個TaskGroup平分切分好的100個Task,每一個TaskGroup負責以5個并發(fā)共計運行25個Task。
性能優(yōu)化
最直接的方式就是提高mysql和hdfs的硬件性能如cpu、內(nèi)存、IOPS、網(wǎng)絡帶寬等。當硬件資源受限的情況下,可以有如下幾種辦法:
將不同的集群劃分到同一個網(wǎng)絡或者區(qū)域內(nèi),減少跨網(wǎng)絡的不穩(wěn)定性,如將阿里云集群遷移到amazon集群,或者同一個amazon集群中不同區(qū)域劃分到同一個子網(wǎng)絡內(nèi)。
對數(shù)據(jù)庫按照主鍵劃分。datax對單個表默認一個通道,如果指定拆分主鍵,將會大大提升同步并發(fā)數(shù)和吞吐量。
在cpu、內(nèi)存以及mysql負載滿足的情況下,提升通道并發(fā)數(shù)。通道并發(fā)數(shù)意味著更多的內(nèi)存開銷,jvm調(diào)優(yōu)是重中之重。
當無法提升通道數(shù)量時,而且每個拆分依然很大的時候,可以考慮對每個拆分再次拆分。文章來源:http://www.zghlxwxcb.cn/news/detail-821199.html
設定合適的參數(shù),如mysql超時等。文章來源地址http://www.zghlxwxcb.cn/news/detail-821199.html
到了這里,關于【大數(shù)據(jù)精講】全量同步與CDC增量同步方案對比的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!