ChunJun框架在資料還原上的探索和實踐 | Hadoop Meetup精彩回顧

數棧DTinsight發表於2022-10-10

Hadoop 是 Apache 基金會旗下最知名的基礎架構開源專案之一。自 2006 年誕生以來,逐步發展成為海量資料儲存、處理最為重要的基礎元件,形成了非常豐富的技術生態。

作為國內頂尖的 Hadoop 開源生態技術峰會,第四屆 China Apache Hadoop Meetup 於 2022 年 9 月 24 日在上海成功舉辦。

圍繞 “雲數智聚 砥柱篤行” 的主題,來自華為、阿里、網易、位元組跳動、bilibili、平安銀行、袋鼠雲、英特爾、Kyligence、Ampere 等多所企業單位,以及來自 Spark、Fluid、ChunJun、Kyuubi、Ozone、IoTDB、Linkis、Kylin、Uniffle 等開源社群的多位嘉賓均參與了分享討論。

file

作為此次 Meetup 參與社群之一,也是大資料領域的專案,ChunJun 也帶來了一些新的聲音:

ChunJun 框架在實時資料採集和還原上的實現和原理是怎樣的?這段時間以來,ChunJun 有哪些新發展,對於未來發展又有著怎樣的新想法?

作為袋鼠雲資深大資料引擎開發專家,徐超帶來了他的分享,將從一個獨特的角度來介紹 ChunJun 資料整合在資料還原上的探索和實踐。  file

一、ChunJun 框架介紹

第一個問題:ChunJun 這個框架是什麼?能幹啥?

ChunJun (原 FlinkX) 是袋鼠雲基於 Flink 基座自研的資料整合框架,經過 4 年多的迭代,已經成為一個穩定,高效,易用的批流一體的資料整合工具,可實現多種異構資料來源高效的資料同步,目前已有 3.2K+Star。

開源專案地址:

https://gitee.com/dtstack_dev_0/chunjun

01 ChunJun 框架結構

ChunJun 框架基於 Flink 進行開發,提供了豐富的外掛,同時新增了斷點續傳、髒資料管理、資料還原等特性。

file

02 ChunJun 批次同步

・支援增量同步

・支援斷點續傳

・支援多通道 & 併發

・支援髒資料(記錄和控制)

・支援限流

・支援 transformer

03 ChunJun 離線

file

二、實時資料採集上的實現和原理

01 一個樣例

file

02 ChunJun 外掛裝載邏輯

file

03 ChunJun 外掛定義

file

04 ChunJun 資料流轉

file

05 ChunJun 動態執行

面對監聽多個表的情況,包括新新增表的資料,我們如何執行下游的寫入:

・支援 Update 轉換 before,after

・新增擴充套件引數,DB,Schema,Table, ColumnInfo

・支援動態構建 PreparedStatement

06 ChunJun 間隔輪詢

什麼是間隔輪詢?我們是如何做的?

・校驗輪詢欄位型別,如果不是數值型別且 source 並行度大於 1,報錯不支援

・建立三個資料分片,startlocation 為 null 或者配置的值,mod 分別為 0,1,2

・構造 SQL:不同 SQL 的取餘函式不同,各自外掛實現

select id,name,age from table where (id > ? and ) mod(id, 3) = 0 order by id;

select id,name,age from table where (id > ? and ) mod(id, 3) = 1 order by id;

select id,name,age from table where (id > ? and ) mod(id, 3) = 2 order by id;

・執行 SQL,查詢並更新 lastRow

・第一次 result 查詢完後,若指令碼中沒有配置 startlocation,則之前的查詢 SQL 為:

select id,name,age from table where mod(id, 3) = 1 order by id;

將其更新為:

select id,name,age from table where id > ? and mod(id, 3) = 1 order by id;

・CP 時獲取 lastRow 中的 id 值,儲存到 state 中

三、實時資料還原上的實現和原理

01 資料還原介紹

資料還原基於對應的資料庫的 CDC 採集功能,比如上面提到的 Oracle Logminer,MySQL binglog,支援將捕獲到的資料完整的還原到下游,所以不僅僅包括 DML,而且也需要對 DDL 進行監聽,將上游資料來源的所有變更行為傳送到下游資料庫的還原。

難點

・DDL,DML 如何有序的傳送到下游

・DDL 語句如何根據下游資料來源的特性進行對應的操作(異構資料來源間 DML 的轉換)

・DML 語句中的 insert update, delete 如何進行處理

02 一個樣例

file

03 整體流程

資料從上游的資料來源獲取之後經過一些列的運算元的處理之後按資料在原始表中的順序準確的還原到目標資料來源,完成資料的實時獲取鏈路。

file

04 DDL 解析

file

資料還原 - DDL 轉換

・基於 Calcite 解析資料來源 DdlSql 轉為 SqlNode

・SqlNode 轉為中間資料 DdlData

・ddlData 轉為 sql:不同語法之間互相轉換;不同資料來源欄位型別互相轉換

05 名字對映

在實時還原中,當前上下游表欄位對應關係必須是相同的,即上游的 database schema table 對應的表只能寫入下游 database schema table 相同的表,同時欄位名稱也必須是相同的。本次迭代將針對表路徑可以進行一個自定義對映以及欄位型別進行自定義對映。

・db or schema 轉換

・表名稱轉換

・欄位名 (提供大小寫轉換),型別隱式轉換

06 中間資料快取

資料(不論 ddl 還是 dml 資料)下發到對應表名下的 unblock 佇列中,worker 在輪詢過程中,處理 unblock 資料佇列中的資料,在遇到 ddl 資料之後,將資料佇列置為 block 狀態,並將佇列引用交給 store 處理。

store 在拿到佇列引用之後,將佇列頭部的 ddl 資料下發到外部儲存中,並監聽外部儲存對 ddl 的反饋情況(監聽工作由 store 中額外的執行緒來執行),此時,佇列仍然處於 block 狀態。

在收到外部儲存的反饋之後,將資料佇列頭部的 ddl 資料移除,同時將佇列狀態迴歸為 unblock 狀態,佇列引用還給 worker。

file

07 目標端接收資料

file

・獲取到 DdlOperator 物件

・根據目標資料來源對應的 DDLConvertImpl 解析器轉換為目標資料來源 sql

・執行對應的 sql, 比如刪除表

・觸發調整 DDLChange 表,修改對應的 DDL 狀態

・中間儲存 Restore 運算元,監聽狀態變更,執行後續資料下發操作

四、ChunJun 未來規劃

・提供對 Session 進行管理

・提供 restful 服務,ChunJun 本身作為一個服務,便於外圍系統進行整合

・對實時資料還原進行加強,包括擴充套件支援更多的資料來源的 DDL 解析

此外,本次分享的全文影片內容也可以隨時觀看,如果您有興趣,歡迎前往袋鼠雲 B 站平臺觀看。

Apache Hadoop Meetup 2022

ChunJun 影片回顧:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995740/viewspace-2917575/,如需轉載,請註明出處,否則將追究法律責任。

相關文章