阿里巴巴开源异构数据源离线/全量/增量同步工具 - DataX

news2024/11/14 20:56:54

在这里插入图片描述

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

阿里巴巴异构数据源离线同步工具 - DataX

  • 前言
  • 什么是DataX
  • DataX支持哪些数据
  • DataX框架设计
  • DataX核心架构
  • DataX安装
  • DataX同步Mysql数据
  • 总结

前言

相信作为开发的小伙伴们在公司一定会遇到数据库数据同步的问题,比如SqlServer中的数据同步到MysqlMysql同步到Mysql另一个库等等,再比如遇到每天需要全量同步到不同数据库的需求,无论是采用Java代码来实现数据库间的同步还是使用数据库的调度任务处理起来都相当麻烦,如果还有其它的数据库类型,那么会涉及多套sql以及配置,那么有没有更简单的同步工具?答案是有的,就是本篇介绍的DataX

什么是DataX

在这里插入图片描述

阿里巴巴的DataX是一款开源的数据交换平台,用于实现不同数据源之间的数据同步和迁移。DataX的设计目标是提供一个通用、高效、易扩展的数据交换框架,适用于多种场景,包括数据仓库构建、数据迁移、数据同步等。

Datax在github上开源地址:https://github.com/alibaba/DataX

以下博主总结了阿里巴巴DataX一些重要特点和信息:

  • 多数据源支持: DataX支持从不同种类的数据源抽取数据,包括关系型数据库(MySQL、Oracle等)、NoSQL数据库(MongoDB、HBase等)、大数据存储(Hadoop、Hive等)以及各种文件格式(JSON、CSV等)。

  • 多通道传输: DataX支持多通道的数据传输,可以通过并行的方式提高数据传输效率。这对于大规模数据迁移和同步操作非常有用。

  • 丰富的插件体系: DataX的插件体系十分丰富,用户可以通过配置选择适用于特定数据源和目标的插件。这种可插拔的架构使得DataX非常灵活,易于扩展和定制。

  • 强大的性能优化: DataX在设计上注重性能优化,通过并行处理、内存管理和流式计算等技术手段,提高了数据交换的效率。

  • 易用性: DataX提供了可视化的配置界面,使得用户能够通过简单的配置文件来定义数据同步任务。这降低了使用门槛,适用于不同层次的技术人员。

  • 开源社区支持: DataX是开源项目,拥有庞大的开源社区支持。用户可以获取源代码、参与讨论、提出建议,使得DataX在不断的演进和改进中。

在这里插入图片描述

DataX支持哪些数据

DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。DataX目前支持数据如下:
在这里插入图片描述

DataX框架设计

在这里插入图片描述
Datax的架构采用FrameWork+plugin构建,其中:

  • Reader:数据采集模块,负责采集数据源的数据,将数据发送给Framework

  • Writer:数据写入模块,负责不断向Framework取数据,并将数据写入到目的端

  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲、流控、并发、数据转换等核心技术问题。

DataX核心架构

DataX 开源版本支持单机多线程模式完成同步作业运行,从整体架构设计非常简要说明DataX各个模块相互关系
在这里插入图片描述
Job:单个作业的管理节点,负责数据清理、子任务划分、TaskGroup监控管理

Task:由Job切分出来,是Datax的最小单元,每隔Task负责一部分数据的同步工作

Schedule:将Task组成TaskGroup,单个TaskGroup的并发数量为5. TaskGroup:负责启动Task

DataX安装

系统要求
jdk1.8+
python运行环境(推荐python2.6.x)

DataX下载有两种方式,一种是直接下载压缩包,另外一种是下载源码自己手动编译,这里我们使用压缩包的方式

下载datax的压缩包:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

下载后上传或移动至自己需要的存放的目录开始解压

tar -zxf datax.tar.gz

进入datax的bin目录,运行自检脚本

cd datax/bin/
python datax.py -r streamreader -w streamwriter

如果看到了生成的JSON配置模版即代表安装成功,如下

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "streamreader", 
                    "parameter": {
                        "column": [], 
                        "sliceRecordCount": ""
                    }
                }, 
                "writer": {
                    "name": "streamwriter", 
                    "parameter": {
                        "encoding": "", 
                        "print": true
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": ""
            }
        }
    }
}

DataX同步Mysql数据

由于博主本机上只安装了mysql,这里就暂时演示同步mysql的操作,还是通过命令获取配置模板

脚本获取的配置模版会生成在DataX安装目录下job文件夹

python datax.py -r mysqlreader -w mysqlwriter

cd进入job文件夹对生成的配置模版进行对应参数的配置,一下简单标注一些参数说明,具体的其他参数可以参考官方文档,这里就不赘述了

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": [],  #需要同步的列
                        "connection": [ #连接信息
                            {
                                "jdbcUrl": [], 
                                "table": [] #同步表
                            }
                        ], 
                        "password": "",  #密码
                        "username": "",  #用户名
                        "where": "" #筛选条件
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
                        "column": [],  #写入段的列名,与上面需要同步的值的位置保持一致
                        "connection": [ #连接信息
                            {
                                "jdbcUrl": "", 
                                "table": []
                            }
                        ], 
                        "password": "",  #密码
                        "preSql": [],  #执行写入之前做的事情
                        "session": [], # DataX在获取Mysql连接时,执行session指定的SQL语句,修改当前connection session属性
                        "username": "",  #用户名
                        "writeMode": "" #控制写入数据到目标表采用 insert into 或者 replace into 或者 ON DUPLICATE KEY UPDATE 语句
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": ""
            }
        }
    }
}

为了方便测试,我们新建两个表,一个有数据一个空数据

CREATE TABLE `goods`(
`id` int(4) not null auto_increment,
`name` varchar(32) not null,
PRIMARY KEY(id)
)
CREATE TABLE `goods2`(
`id` int(4) not null auto_increment,
`name` varchar(32) not null,
PRIMARY KEY(id)
)
INSERT INTO `goods` VALUES (1,'方便面')
INSERT INTO `goods` VALUES (2,'矿泉水')
INSERT INTO `goods` VALUES (3,'花生')

修改模版参数,以博主本机为例

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": [
                            "id",
                            "name"
                        ], 
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/test"], 
                                "table": ["goods"]
                            }
                        ], 
                        "password": "123456", 
                        "username": "root"
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
                        "column": [
                            "id",
                            "name"
                        ], 
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/test", 
                                "table": ["goods2"]
                            }
                        ], 
                        "password": "123456", 
                        "username": "root"
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}

编辑完成保存最后运行

# 注意博主目录此刻还是在bin目录
python datax.py ../job/mysql2mysql.json

注意控制台输出成功信息后,检查数据表可以看到数据已经同步过去了

总结

本章仅仅演示了mysql间的数据同步,如果需要其它同步,可以在评论区留言或者查阅官方文档。最后总结一下,DataX框架通过插件化架构、任务分治和并发处理、流式计算等设计特点,实现了一个通用、高效、易扩展的数据交换平台。这使得DataX成为企业在构建数据仓库、进行数据迁移和实现数据同步等方面的理想选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1353343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web component - 使用HTML Templates和Shadow DOM构建现代UI组件

Web Component是一种用于构建可重用的UI组件的技术。它使用标准化的浏览器API,包括Custom Elements、Shadow DOM和HTML Templates来实现组件化开发方式。这些API都是现代浏览器原生支持的,因此不需要引入第三方库或框架即可使用。 在这篇博客中&#xf…

如何学习TS?

文章目录 一. 8种内置基础类型.ts二. void、never、any、unknown类型void类型never类型any类型unknown类型总结:void和any在项目中是比较常见的,never和unknown不常用。 三. 数组和函数类型定义.ts四. 元组与交叉类型使用元组数组一般有同类型的值组成&a…

页面间动画之放大缩小视图

目录 1、Exchange类型的共享元素转场 2、Static类型的共享元素转场 3、场景示例 在不同页面间,有使用相同的元素(例如同一幅图)的场景,可以使用共享元素转场动画衔接。为了突出不同页面间相同元素的关联性,可为它们…

管理文件传输的工具CopyQueue mac功能特点

CopyQueue for mac是用于管理文件传输的工具,可以有效地复制多个文件,并且比OS X的速度更快,暂停和恢复文件传输,日程任务和更多,使用和管理起来都非常的简单方便。如果你要复制很多文件,CopyQueue更快更高…

pytest conftest定义一个fixtrue获取测试环境地址

方便全局切换地址 pytest.fixture() def config():data {测试环境: {A环境: 127.0.0.1,B环境: 127.0.0.2,C环境: 127.0.0.3,D环境: 127.0.0.4},}return data.get(测试环境, {}).get(A环境)import pytestdef test_case001(config):url http://str(config):8080/api/user/logi…

从零开始了解大数据(七):总结

系列文章目录 从零开始了解大数据(一):数据分析入门篇-CSDN博客 从零开始了解大数据(二):Hadoop篇-CSDN博客 从零开始了解大数据(三):HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四):MapReduce篇-CSDN博客 从零开始了解大…

基于rk3568 Android H265推流SRS低延迟网页播放方案

在音视频领域,融合推流,低码流,低延迟,浏览器H5化是一个降低成本,提升用户体验的重要手段。同时适配现有直播的生态也是一个必要条件。 在满足上述要求的情况下,我做了以下实践,取得了良好的效果…

每天五分钟计算机视觉:揭秘迁移学习

本文重点 随着人工智能的迅速发展,深度学习已经成为了许多领域的关键技术。然而,深度学习模型的训练需要大量的标注数据,这在很多情况下是不现实的。迁移学习作为一种有效的方法,可以在已有的数据和模型上进行训练,然后将其应用于新的任务。这种方法大大降低了对新任务的…

opencv期末练习题(2)附带解析

图像插值与缩放 %matplotlib inline import cv2 import matplotlib.pyplot as plt def imshow(img,grayFalse,bgr_modeFalse):if gray:img cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.imshow(img,cmap"gray")else:if not bgr_mode:img cv2.cvtColor(img,cv2.COLOR_B…

2023机器人行业总结,2024机器人崛起元年(具身智能)

2023总结: 1.Chatgpt引爆了通用人工智能,最大的受益者或是机器人,2023年最热门的创业赛道便是人形机器人,优必选更是成为人形机器人上市第一股, 可以说2023年是机器人开启智能化的元年,而2024则将成为机器…

Java网络编程之IP,端口号,通信协议(UDP,TCP)

目录 1.软件架构2.网络编程三要素3.IP1.IPV42.IPV6 4.端口号5.协议1.UDP协议1.单播2.组播3.广播 2.TCP协议1.三次握手2.四次挥手 1.软件架构 ①C/S:客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美…

三千多个厂商默认帐号、默认密码(建议收藏)

晚上好,我的网工朋友。 做网工这行,多少都会遇上各种各样的厂商设备,遇上一些新设备,虽然没有更改密码,但不知道初始默认账号和密码是啥。 今天就给你整理了一波,三千多个厂商默认帐号、默认密码&#xf…

Java学习,一文掌握Java之SpringBoot框架学习文集(2)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

LLVM(简介)

历史 LLVM(low level virtual machine)起源于伊利诺伊大学的一个编译器实验项目,目前已经发展成一个集编译器和工具链为一体的商业开源项目,因此其英文名称的含义被扩大,不再仅仅是字面意思。其创始人为 Chris Lattner。LLVM项目遵循的开源许…

流媒体学习之路(WebRTC)——Pacer与GCC(5)

流媒体学习之路(WebRTC)——Pacer与GCC(5) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全…

单片机外设矩阵键盘之线反转法识别原理与示例

单片机外设矩阵键盘之线反转法识别原理与示例 1.概述 这篇文章主要介绍单片机接收 4X4矩阵键盘发出的指令,做出对应的反馈。其中主要介绍矩阵键盘线反转方式的识别原理和实操。 2.矩阵键盘线反转识别原理 2.1.矩阵键盘硬件接线原理 矩阵键盘的硬件接线方式有多种…

MySQL第三战:CRUD,函数1以及unionunion all

前言 在当今的数字化时代,数据库已经成为信息管理的重要工具。其中,MySQL作为一种流行的关系型数据库管理系统,已经广泛应用于各种业务场景。在本文中,我们将深入探讨MySQL中的核心概念,包括创建(Create&a…

感恩客户相伴23载,泛微2024持续向上!

2023年,国家大力推动数字经济发展,各行各业在加速数字化转型,在这一年,泛微保持持续增长,引领行业发展,为组织的数字化转型助力。感恩客户与伙伴朋友的支持与信任! 01.泛微中大客户总量突破8万余…

burpsuite模块介绍之extender(扩展)

extender Burp提供了对第三方拓展插件的支持,使用户能够编写自定义插件或从插件商店中安装拓展插件。这些Burp扩展程序可以以多种方式定制Burp的行为,包括修改HTTP请求和响应、自定义UI、添加自定义扫描程序检查以及访问关键的运行时信息,如代理历史记录、目标站点地图和扫…

Ubuntu Server 22.04 连接Wifi并配置静态IP

Ubuntu Server 22.04 连接Wifi并配置静态IP 前言:我家最近好几台电脑,我都想跑着Ubuntu Server做服务器,但是近几年的超级本已经不自带网口了,所以我就考虑用Wifi来联网,速度也还可以,但是既然是跑服务&…