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 概覽
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 原理
*官方圖,Transport 處是 Channel,本人覺得不太準確,應為 Transport
> 作業分解為任務,任務分組,最後排程器排程任務(組)
> 排程器負責分派資源執行任務(組),TaskExecutor 執行任務
> transport 包括資料交換(exchanger),資料轉換(transformer),交換資料位元組數/記錄數的統計(channel)
5。 分散式 datax 設計原理
Datax原理介紹了社群版的 datax 原理,資料同步分兩部分,任務
分組
和
排程
,其中排程與分散式有關,datax 抽象了排程介面,因此分散式 datax 主要是實現 datax
分散式排程器
及其 Communication 元件
Ø Datax 排程邏輯
分 3 步,
1) 註冊和初始化 Communication 元件,其中的 configurations 即任務組
2) 開啟任務(組)執行 startAllTaskGroup
3) 作業執行期間,週期性地計算作業/任務組的執行狀態
Ø Datax 排程器介面規範:
startAllTaskGroup 排程的主要實現介面
dealFailedStat/dealKillingStat 任務組失敗/killing 處理
isJobKilling 作業 killing 事件處理
Ø datax 任務組模式
分片是任務組,datax engine 的任務組模式正好對應分片執行,接收分散式作業傳入的分片即可
Ø communication 元件
社群版的 communication 模型
通訊器 Communicator 負責管理/收集報告/通訊 Communication
Collector 合併任務為任務組統計;合併任務組為作業統計
Reporter
分散式架構下,任務組在本地執行,統計與社群版的單機模式相同,但輸出到 redis
作業統計從 redis 獲取任務組統計,再累計為作業統計,從而做作業 summary, 支援快照和摘要輸出到持久儲存
Ø PerTracer 元件和 VM 資訊
兩單機元件,不對該元件改造
6。 分散式元件
elastic 平臺
分散式支撐服務,如,znode 讀寫,服務註冊,選主服務,例項服務,分片,分片容錯
elastic-timeslot/
elastic-jobx
基於 elastic 平臺的分散式排程,支援作業分片,分片容錯
兩者合併為 elastic-scheduler,支援時間槽模式和排程作業雙模式
elastic 為分散式開發提供基礎元件,通用元件,大大減輕分散式開發時間和難度
7。 分散式 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
engine 接入分散式作業,作業上下文(shardingContext)裝載著分派的任務組(分片),engine 從上下文獲取分片
8。3 觀測節點(watcher)
觀測節點負責週期性地計算作業統計快照和彙總,輸出到持久資料來源
觀測節點部署於分散式排程
時間槽模式
8。4 Communication 元件
Communication 是任務/任務組/作業執行狀態統計元件,分兩個層級,任務組和作業,任務組本地執行,作業聚合任務組的統計
註冊
註冊任務/任務組統計,後續的報告根據註冊更新;分散式場景下,註冊任務與單機一直,註冊任務組就是是寫入分片
收集
增量合併或累計
1。 counter 累計
2。 state 合併
3。 message 合併
分散式場景下,輸出到 redis;單機場景下,預設寫日誌或 NOP(啥都不做)
報告
生成新的統計,報告給通訊器,通訊器 update 為最新統計
計算
計算衍生的統計指標,如速率
分散式場景下,操作與單機相同,任務組聚合任務統計,作業聚合任務組統計;不同的是讀入來源,分散式任務組統計放到 redis
輸出
儲存作業統計,快照和彙總
Ø 統計輸出元件
元件負責 Communication 輸出作業狀態快照和彙總
快照
在作業執行期間,週期性地收集作業任務(組)並累計資料
彙總
是作業執行速率報告,可以用於對賬,檢查作業執行完整性,平臺的效能
分散式場景下任務組狀態輸出到 redis(HMSET 結構),設定時效,下圖 展示 snapshot 和 summary 結構
Ø 本著”
不修改,只擴充套件的原則
”,輸出元件擴充套件原因的 reporter 元件,分散式場景下,使用 redis 實現,單機使用 log 或 nop
Ø 輸出庫介面設計item 對應任務組統計;agg 聚合任務組的作業統計;metrics 作業設定時間間隔速率計算,即作業 summary,特別地,作業完成後的作業統計與初始作業統計的 metrics 計算是作業的最終 summary
模板 T 對應 snapshot,S 對應 Summary
NEXT
效能最佳化:
Ø 資料量大的同步
獨立分片,多工組,資源傾斜,降低作業整體時間
健壯性
Ø checkpoint 元件
支援分片故障轉義後,從記錄位點執行任務