Hadoop是Apache基金會旗下最知名的基礎架構開源專案之一,自2006年誕生以來,逐步發展成為海量資料存盤、處理最為重要的基礎組件,形成了非常豐富的技術生態,
作為國內頂尖的 Hadoop 開源生態技術峰會,第四屆 China Apache Hadoop Meetup于 2022年9月24日在上海成功舉辦,
圍繞“云數智聚 砥柱篤行”的主題,來自華為、阿里、網易、位元組跳動、bilibili、平安銀行、袋鼠云、英特爾、Kyligence、Ampere等多所企業單位,以及來自Spark、Fluid、ChunJun、Kyuubi、Ozone、IoTDB、Linkis、Kylin、Uniffle等開源社區的多位嘉賓均參與了分享討論,

作為此次Meetup參與社區之一,也是大資料領域的專案,ChunJun也帶來了一些新的聲音:
ChunJun框架在實時資料采集和還原上的實作和原理是怎樣的?這段時間以來,ChunJun有哪些新發展,對于未來發展又有著怎樣的新想法?
作為袋鼠云資深大資料引擎開發專家,徐超帶來了他的分享,將從一個獨特的角度來介紹ChunJun資料集成在資料還原上的探索和實踐,

一、ChunJun框架介紹
第一個問題:ChunJun這個框架是什么?能干啥?
ChunJun(原FlinkX) 是袋鼠云基于Flink 基座自研的資料集成框架,經過4年多的迭代,已經成為一個穩定,高效,易用的批流一體的資料集成工具,可實作多種異構資料源高效的資料同步,目前已有3.2K+Star,
開源專案地址:
https://github.com/DTStack/chunjun
https://gitee.com/dtstack_dev_0/chunjun
01 ChunJun框架結構
ChunJun 框架基于Flink 進行開發,提供了豐富的插件,同時添加了斷點續傳、臟資料管理、資料還原等特性,

02 ChunJun批量同步
? 支持增量同步
? 支持斷點續傳
? 支持多通道&并發
? 支持臟資料(記錄和控制)
? 支持限流
? 支持transformer
03 ChunJun離線

二、實時資料采集上的實作和原理
01 一個樣例

02 ChunJun插件裝載邏輯

03 ChunJun插件定義

04 ChunJun資料流轉

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 一個樣例

03 整體流程
資料從上游的資料源獲取之后經過一些列的算子的處理之后按資料在原始表中的順序準確的還原到目標資料源,完成資料的實時獲取鏈路,

04 DDL決議

資料還原- 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,

07 目標端接收資料

? 獲取到DdlOperator 物件
? 根據目標資料源對應的DDLConvertImpl決議器轉換為目標資料源sql
? 執行對應的sql,比如洗掉表
? 觸發調整DDLChange 表,修改對應的DDL 狀態
? 中間存盤Restore算子,監聽狀態變更,執行后續資料下發操作
四、ChunJun未來規劃
? 提供對Session 進行管理
? 提供restful 服務,ChunJun 本身作為一個服務,便于外圍系統進行集成
? 對實時資料還原進行加強,包括擴展支持更多的資料源的DDL 決議
此外,本次分享的全文視頻內容也可以隨時觀看,如果您有興趣,歡迎前往袋鼠云B站平臺觀看,
Apache Hadoop Meetup 2022
ChunJun視頻回顧:
https://www.bilibili.com/video/BV1sN4y1P7qk/?spm_id_from=333.337.search-card.all.click
袋鼠云開源框架釘釘技術交流qun(30537511),歡迎對大資料開源專案有興趣的同學加入交流最新技術資訊,開源專案庫地址:https://github.com/DTStack/Taier
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513121.html
標籤:大數據
