分散式 dataX 詳細 (落地) 設計

1。 背景

分散式 DataX 基於 datax 打造的語義分分散式 ETL 平臺。Datax 提供 reader-framework-writer 框架,方便開發兩種異構資料來源資料同步,但開源的 datax 缺少分散式特性,本文介紹基於

elastic 平臺

elastic-scheduler

改造分散式 datax 詳細(落地)設計

2。 參考和術語

ETL

Extract-Transform-Load 的縮寫,資料從來源端經過抽取(extract)、轉換(transform)、載入(load)至目的端

《分散式 datax 架構設計》

分散式架構設計文件,分散式 datax 概念和高層的時間

《elastic 平臺設計》

分散式支撐服務設計說明

《分散式時間槽架構設計》

介紹分散式時間槽詳細設計

3。 概覽

下圖展示分散式 datax 概覽

分散式 dataX 詳細 (落地) 設計

rbt 全量同步,接入分散式 datax

cdc 增量同步,接入雲 datax

rb-transformer 基於規則的轉換框架

setl-data 資料讀寫元件,包括 cdc,jdbc(jpa),neo4j

config-center 配置中心,支援 zk,nacos 等,可擴充套件,datax 的配置檔案,job。json,core。json,資料同步業務的檔案放到配置中心無需依賴本地檔案

scanner 資料庫掃描工具包,生成 schema,輔助資料同步

分散式 datax 支援時間槽模式和排程作業模式

cloud-datax

elastic-datax

4。 datax 原理

分散式 dataX 詳細 (落地) 設計

*官方圖,Transport 處是 Channel,本人覺得不太準確,應為 Transport

> 作業分解為任務,任務分組,最後排程器排程任務(組)

> 排程器負責分派資源執行任務(組),TaskExecutor 執行任務

> transport 包括資料交換(exchanger),資料轉換(transformer),交換資料位元組數/記錄數的統計(channel)

5。 分散式 datax 設計原理

Datax原理介紹了社群版的 datax 原理,資料同步分兩部分,任務

分組

排程

,其中排程與分散式有關,datax 抽象了排程介面,因此分散式 datax 主要是實現 datax

分散式排程器

及其 Communication 元件

Ø Datax 排程邏輯

分散式 dataX 詳細 (落地) 設計

分 3 步,

1) 註冊和初始化 Communication 元件,其中的 configurations 即任務組

2) 開啟任務(組)執行 startAllTaskGroup

3) 作業執行期間,週期性地計算作業/任務組的執行狀態

Ø Datax 排程器介面規範:

分散式 dataX 詳細 (落地) 設計

startAllTaskGroup 排程的主要實現介面

dealFailedStat/dealKillingStat 任務組失敗/killing 處理

isJobKilling 作業 killing 事件處理

Ø datax 任務組模式

分片是任務組,datax engine 的任務組模式正好對應分片執行,接收分散式作業傳入的分片即可

Ø communication 元件

社群版的 communication 模型

分散式 dataX 詳細 (落地) 設計

通訊器 Communicator 負責管理/收集報告/通訊 Communication

Collector 合併任務為任務組統計;合併任務組為作業統計

Reporter

分散式架構下,任務組在本地執行,統計與社群版的單機模式相同,但輸出到 redis

作業統計從 redis 獲取任務組統計,再累計為作業統計,從而做作業 summary, 支援快照和摘要輸出到持久儲存

Ø PerTracer 元件和 VM 資訊

兩單機元件,不對該元件改造

6。 分散式元件

elastic 平臺

分散式支撐服務,如,znode 讀寫,服務註冊,選主服務,例項服務,分片,分片容錯

elastic-timeslot/

elastic-jobx

基於 elastic 平臺的分散式排程,支援作業分片,分片容錯

兩者合併為 elastic-scheduler,支援時間槽模式和排程作業雙模式

elastic 為分散式開發提供基礎元件,通用元件,大大減輕分散式開發時間和難度

7。 分散式 datax 技術架構

分散式 dataX 詳細 (落地) 設計

client/watcher/worker

client 負責寫入任務組分片,觸發 worker 執行;client 可整合到管理臺;作業監管,檢測作業完成,清理作業環境

watcher 作業統計,輸出統計;按作業分片觀測和聚合計算; watcher 可整合到管理臺

worker 分配分片;任務(組)執行,任務組執行統計

整體架構設計遵循

不修改,只擴充套件的原則

,相容原有 standalone

8。 詳細設計

8。1 分散式 Scheduler

分散式排程器是 client 的一部分,第7章 技術架構分散式排程原有的功能

作業統計

分離到 watcher,分散式排程功能簡單了很多,只要寫入分片(任務組),寫入作業統計分片,trigger worker

寫入分片(任務組和作業統計)提供

事務保證

排程器在 JobContainer 根據-m 引數初始化,standalone 單機的排程器 StandAloneScheduler,distribute 使用 ElasticScheduler

8。2 工作節點(worker)

工作節點是執行模式為 taskgroup 的 datax engine

分散式 dataX 詳細 (落地) 設計

engine 接入分散式作業,作業上下文(shardingContext)裝載著分派的任務組(分片),engine 從上下文獲取分片

8。3 觀測節點(watcher)

觀測節點負責週期性地計算作業統計快照和彙總,輸出到持久資料來源

觀測節點部署於分散式排程

時間槽模式

8。4 Communication 元件

Communication 是任務/任務組/作業執行狀態統計元件,分兩個層級,任務組和作業,任務組本地執行,作業聚合任務組的統計

分散式 dataX 詳細 (落地) 設計

註冊

註冊任務/任務組統計,後續的報告根據註冊更新;分散式場景下,註冊任務與單機一直,註冊任務組就是是寫入分片

收集

增量合併或累計

1。 counter 累計

2。 state 合併

3。 message 合併

分散式場景下,輸出到 redis;單機場景下,預設寫日誌或 NOP(啥都不做)

報告

生成新的統計,報告給通訊器,通訊器 update 為最新統計

計算

計算衍生的統計指標,如速率

分散式場景下,操作與單機相同,任務組聚合任務統計,作業聚合任務組統計;不同的是讀入來源,分散式任務組統計放到 redis

輸出

儲存作業統計,快照和彙總

Ø 統計輸出元件

元件負責 Communication 輸出作業狀態快照和彙總

快照

在作業執行期間,週期性地收集作業任務(組)並累計資料

彙總

是作業執行速率報告,可以用於對賬,檢查作業執行完整性,平臺的效能

分散式 dataX 詳細 (落地) 設計

分散式場景下任務組狀態輸出到 redis(HMSET 結構),設定時效,下圖 展示 snapshot 和 summary 結構

分散式 dataX 詳細 (落地) 設計

Ø 本著”

不修改,只擴充套件的原則

”,輸出元件擴充套件原因的 reporter 元件,分散式場景下,使用 redis 實現,單機使用 log 或 nop

分散式 dataX 詳細 (落地) 設計

Ø 輸出庫介面設計item 對應任務組統計;agg 聚合任務組的作業統計;metrics 作業設定時間間隔速率計算,即作業 summary,特別地,作業完成後的作業統計與初始作業統計的 metrics 計算是作業的最終 summary

分散式 dataX 詳細 (落地) 設計

模板 T 對應 snapshot,S 對應 Summary

NEXT

效能最佳化:

Ø 資料量大的同步

獨立分片,多工組,資源傾斜,降低作業整體時間

健壯性

Ø checkpoint 元件

支援分片故障轉義後,從記錄位點執行任務