00-開源離線同步工具DataX3.0重磅詳解!

来源:https://www.cnblogs.com/JavaEdge/archive/2023/10/20/17776849.html
-Advertisement-
Play Games

1 概覽 DataX 是一個異構數據源離線同步工具,致力於實現包括關係型資料庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構數據源之間穩定高效的數據同步功能。 1.1 設計理念 為瞭解決異構數據源同步問題,DataX將複雜的網狀的同步鏈路變成了星型數據鏈路 ...


1 概覽

DataX 是一個異構數據源離線同步工具,致力於實現包括關係型資料庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構數據源之間穩定高效的數據同步功能。

1.1 設計理念

為瞭解決異構數據源同步問題,DataX將複雜的網狀的同步鏈路變成了星型數據鏈路,DataX作為中間傳輸載體負責連接各種數據源。

當需要接入一個新的數據源的時候,只需要將此數據源對接到DataX,便能跟已有的數據源做到無縫數據同步。

1.2 當前使用現狀

DataX在阿裡巴巴集團內被廣泛使用,承擔了所有大數據的離線同步業務,並已持續穩定運行了6年之久。目前每天完成同步8w多道作業,每日傳輸數據量超過300TB。

此前已經開源DataX1.0版本,此次介紹為阿裡雲開源全新版本DataX3.0,有了更多更強大的功能和更好的使用體驗。

2 框架設計

作為離線數據同步框架,採用Framework + plugin架構。將數據源讀取、寫入抽象成為Reader/Writer插件,納入到整個同步框架:

  • Reader:數據採集模塊,採集數據源的數據,將數據發送給Framework
  • Writer: 數據寫入模塊,不斷向Framework取數據,並將數據寫入到目的端
  • Framework:連接reader和writer,作為兩者的數據傳輸通道,並處理緩衝,流控,併發,數據轉換等核心技術

3 插件體系

主流RDBMS資料庫、NOSQL、大數據計算系統都已接入。DataX目前支持:

類型 數據源 Reader(讀) Writer(寫) 文檔
RDBMS 關係型資料庫 MySQL
Oracle
OceanBase
SQLServer
PostgreSQL
DRDS
達夢
通用RDBMS(支持所有關係型資料庫)
阿裡雲數倉數據存儲 ODPS
ADS
OSS
OCS
NoSQL數據存儲 OTS
Hbase0.94
Hbase1.1
MongoDB
Hive
無結構化數據存儲 TxtFile
FTP
HDFS
Elasticsearch

DataX Framework提供了簡單的介面與插件交互,提供簡單的插件接入機制,只需要任意加上一種插件,就能無縫對接其他數據源。

DataX數據源指南

4 核心架構

支持單機多線程模式完成同步作業運行,DataX作業生命周期的時序圖,從整體架構設計非常簡要說明DataX各個模塊相互關係。

datax_arch

4.1 核心模塊

  1. DataX完成單個數據同步的作業,稱為Job,DataX接受到一個Job後,將啟動一個進程完成整個作業同步過程。DataX Job模塊是單個作業的中樞管理節點,承擔數據清理、子任務切分(將單一作業計算轉化為多個子Task)、TaskGroup管理等功能
  2. DataXJob啟動後,會根據不同的源端切分策略,將Job切分成多個小的Task(子任務),以便併發執行。Task便是DataX作業的最小單元,每一個Task都會負責一部分數據的同步工作
  3. 切分多個Task之後,DataX Job會調用Scheduler模塊,根據配置的併發數據量,將拆分成的Task重新組合,組裝成TaskGroup(任務組)。每一個TaskGroup負責以一定的併發運行完畢分配好的所有Task,預設單個任務組的併發數量為5
  4. 每一個Task都由TaskGroup負責啟動,Task啟動後,會固定啟動Reader—>Channel—>Writer的線程來完成任務同步工作
  5. DataX作業運行起來之後, Job監控並等待多個TaskGroup模塊任務完成,等待所有TaskGroup任務完成後Job成功退出。否則,異常退出,進程退出值非0

4.2 DataX調度流程

用戶提交一個DataX作業,並配置20個併發,將一個100張分表的mysql數據同步到odps。

DataX調度決策思路:

  1. DataXJob根據分庫分表切分成100個Task
  2. 根據20個併發,DataX計算共需分配4個TaskGroup
  3. 4個TaskGroup平分切分好的100個Task,每個TaskGroup負責以5個併發共計運行25個Task

對比 sqoop

5 核心優勢

5.1 可靠的數據質量監控

  • 完美解決數據傳輸個別類型失真問題

    DataX舊版對於部分數據類型(比如時間戳)傳輸一直存在毫秒階段等數據失真情況,新版本DataX3.0已經做到支持所有的強數據類型,每一種插件都有自己的數據類型轉換策略,讓數據可以完整無損的傳輸到目的端。

  • 提供作業全鏈路的流量、數據量運行時監控

    DataX3.0運行過程中可以將作業本身狀態、數據流量、數據速度、執行進度等信息進行全面的展示,讓用戶可以實時瞭解作業狀態。並可在作業執行過程中智能判斷源端和目的端的速度對比情況,給予用戶更多性能排查信息。

  • 提供臟數據探測

    在大量數據的傳輸過程中,必定會由於各種原因導致很多數據傳輸報錯(比如類型轉換錯誤),這種數據DataX認為就是臟數據。DataX目前可以實現臟數據精確過濾、識別、採集、展示,為用戶提供多種的臟數據處理模式,讓用戶準確把控數據質量大關!

豐富的數據轉換功能

DataX作為一個服務於大數據的ETL工具,除了提供數據快照搬遷功能之外,還提供了豐富數據轉換的功能,讓數據在傳輸過程中可以輕鬆完成數據脫敏,補全,過濾等數據轉換功能,另外還提供了自動groovy函數,讓用戶自定義轉換函數。詳情請看DataX3的transformer詳細介紹。

精準的速度控制

還在為同步過程對線上存儲壓力影響而擔心嗎?新版本DataX3.0提供了包括通道(併發)、記錄流、位元組流三種流控模式,可以隨意控制你的作業速度,讓你的作業在庫可以承受的範圍內達到最佳的同步速度。

"speed": {
   "channel": 5,
   "byte": 1048576,
   "record": 10000
}

強勁的同步性能

DataX3.0每一種讀插件都有一種或多種切分策略,都能將作業合理切分成多個Task並行執行,單機多線程執行模型可以讓DataX速度隨併發成線性增長。在源端和目的端性能都足夠的情況下,單個作業一定可以打滿網卡。另外,DataX團隊對所有的已經接入的插件都做了極致的性能優化,並且做了完整的性能測試。性能測試相關詳情可以參照每單個數據源的詳細介紹:DataX數據源指南

健壯的容錯機制

DataX作業是極易受外部因素的干擾,網路閃斷、數據源不穩定等因素很容易讓同步到一半的作業報錯停止。因此穩定性是DataX的基本要求,在DataX 3.0的設計中,重點完善了框架和插件的穩定性。目前DataX3.0可以做到線程級別、進程級別(暫時未開放)、作業級別多層次局部/全局的重試,保證用戶的作業穩定運行。

  • 線程內部重試

    DataX的核心插件都經過團隊的全盤review,不同的網路交互方式都有不同的重試策略。

  • 線程級別重試

    目前DataX已經可以實現TaskFailover,針對於中間失敗的Task,DataX框架可以做到整個Task級別的重新調度。

極簡的使用體驗

易用:下載即可用,支持linux和windows,只需要短短幾步驟就可以完成數據的傳輸。請點擊:Quick Start

詳細:DataX在運行日誌中列印了大量信息,其中包括傳輸速度,Reader、Writer性能,進程CPU,JVM和GC情況等等。

傳輸過程中列印傳輸速度、進度

傳輸過程中會列印進程相關的CPU、JVM

任務結束後,列印總體運行情況

參考

本文由博客一文多發平臺 OpenWrite 發佈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python支持來自數學的通常邏輯條件: 等於:a == b 不等於:a != b 小於:a < b 小於或等於:a <= b 大於:a > b 大於或等於:a >= b 這些條件可以以多種方式使用,最常見的是在"if語句"和迴圈中使用。 if語句是使用if關鍵字編寫的。 示例,if語句: a = ...
  • 知識總覽 2.3.1 單鏈表的定義 知識總覽 單鏈表定義 #include<stdio.h> #include<string.h> #include<stdlib.h> struct LNode{ int data; struct LNode *next; }; int main(){ struct ...
  • dpkt項目是一個`Python`模塊,主要用於對網路數據包進行解析和操作。它可以處理多種協議,例如`TCP`、`UDP`、`IP`等,並提供了一些常用的網路操作功能,例如計算校驗和、解析`DNS`數據包等。由於其簡單易用的特性,`dpkt`被廣泛應用於網路安全領域,例如流量分析、漏洞利用、入侵檢測... ...
  • 一、掃雷游戲分析 關鍵步驟:兩個二維數組的大小為11*11,但實際上操作的只有中心的9*9的棋盤,創建另外兩行的原因是方便統計一個坐標周圍3*3的雷的個數1.創建兩個二維數組一個存放佈置好的雷(1號),另外一個存放空的棋盤(2號)2.選手選出來的坐標傳到1號棋盤上對坐標進行分析如果是雷就返回被炸死了 ...
  • 在上篇文章 每個後端都應該瞭解的 OpenResty 入門以及網關安全實戰 中,我向大家介紹了 OpenResty 的入門使用是 WAF 防禦實戰,這篇文章將給大家繼續介紹 OpenResty 入門之性能測試 篇。 性能測試是軟體開發中不可或缺的一環,它可以幫助我們評估系統的性能、穩定性、可擴展性等 ...
  • 來源:nginx(ID:nginx-study) Cloudflare公司去年宣佈棄用nginx,轉用自研的新一代方向代理服務Pingora,並號稱比nginx更快、更高效、更安全,下麵通過Cloudfare官方網站的一篇文章來瞭解下Pingora比Nginx強在哪裡。 簡介 今天,我們很高興有機會 ...
  • reCAPTCHA是Google公司推出的一項驗證服務,使用十分方便快捷,在國外許多網站上均有使用。它與許多其他的人機驗證方式不同,它極少需要用戶進行各種識圖驗證。 它的使用方式如下如所示,只需勾選覆選框即可通過人機驗證。 雖然簡單但效果很好,因為Google會收集一些瀏覽器信息,網路信息,滑鼠軌跡 ...
  • 簡介 Go語言中的切片(slice)是一種靈活的數據結構,它構建在數組之上並提供了方便的方式來操作數組的一部分。切片的底層實現涉及到數組和一些元數據。以下是Golang切片的底層實現的詳細介紹: 底層數組(Underlying Array): 切片是建立在一個底層數組之上的。這個數組通常比切片的容量 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...