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

在这里插入图片描述

😄 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.mfbz.cn/a/288709.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android——自定义TextView

效果展示&#xff1a; 代码解析&#xff1a; 1、首先设置自定义属性&#xff08;res/values下新建一个attrs.xml文件&#xff09; <?xml version"1.0" encoding"utf-8"?> <resources><!-- name 自定义view的名字 CustomTextView--&…

假期归来必看!2023年9月份,爆款论文总结,了解最新学术进展!

以下文章来源于AINLPer &#xff0c;作者ShuYini 十一假期结束了&#xff0c;十月基本上算是过了一半了&#xff0c;小伙伴们收收心准备开始学习工作吧。按照惯例&#xff0c;月初继续带到家盘一下上个月(九月份)的热点论文。本月论文主要分为大模型微调、大模型发布、大模型应…

jmeter线程组

特点&#xff1a;模拟用户&#xff0c;支持多用户操作&#xff1b;可以串行也可以并行 分类&#xff1a; setup线程组&#xff1a;初始化 类似于 unittest中的setupclass 普通线程组&#xff1a;字面意思 teardown线程组&#xff1a;环境恢复&#xff0c;后置处理

泰国Cafe Racer卖到日本去了还限量150台?

GPX推出日本限定 GTM250R Cafe Racer&#xff0c;复古小车卖到日本去了&#xff0c;限量150台&#xff0c;不得不说这台小车还是挺有味道的。现代的复古风格摩托车也是永远都不会落伍&#xff0c;即使没有什么品牌背书&#xff0c;喜欢这种车型的人&#xff0c;对于配置动力都不…

Uniapp使用wx.getFuzzyLocation()方法,没有超过日调用次数,报错:“此key每日调用已达到上限”

前言&#xff1a; 最近在进行一个小程序项目开发的时候&#xff0c;使用wx.getFuzzyLocation()方法&#xff0c;没有超过日调用次数&#xff0c;但是却出现了报错&#xff1a;“此key每日调用已达到上限”。 解决方案&#xff1a; 打开腾讯位置服务 - 立足生态&#xff0c;连…

学习Go语言Web框架Gee总结--http.Handler(一)

学习Go语言Web框架Gee总结--http.Handler http-base/go.modhttp-base/main.gohttp-base/gee/gee.gohttp-base/gee/go.mod 网站学习来源&#xff1a;Gee 代码目录结构&#xff1a; http-base/go.mod //指定当前模块的名称为 "example" module example//指定当前模…

Python入门学习篇(十七)——封装、继承、多态

1 封装 1.1 理解 属性和方法书写到类里面的操作即为封装 封装可以理解成私有化属性和私有化方法1.2 示例代码 class Person():p_num 0 # 用于统计数量def __init__(self, name, age, sex, job):# __name为私有化属性self.__name nameself.age ageself.sex sexself.job …

一种可扩展的多属性可控文本生成即插即用方法

《An extensible plug-and-play method for multi-aspect controllable text generation》论文解读 文章的主要工作 &#xff08;1&#xff09;提出了一种可扩展的即插即用方法&#xff0c;PROMPT GATING&#xff0c;用于多方面可控文本生成&#xff0c;它能够通过简单地连接…

引导和服务

一、Linux操作系统引导过程 1、引导过程总览图 2、引导过程的详细步骤 1.开机自检&#xff08;BIOS&#xff09; 服务器主机开机以后&#xff0c;将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测&#xff0c;检测成功后根据预设的启动顺序移交系统控制权&a…

【MySQL】数据库之主从复制和读写分离

目录 一、什么是读写分离&#xff1f; 二、为甚要读写分离&#xff1f; 三、什么时候需要读写分离&#xff1f; 四、主从复制与读写分离 五、MySQL支持的二进制日志格式 六、主从复制的工作原理 七、MySQL读写分离的原理 八、MySQL读写分离的方式有哪些 九、实验一&am…

Windows 7 虚拟机的安装以及解决安装VMVMware tools问题

1.Windows 7 虚拟机的安装以及解决安装VMVMware tools问题 参考&#xff1a;Windows 7 虚拟机的安装以及解决安装VMVMware tools问题 注意&#xff1a;下载官方补丁&#xff1a;Microsoft Update Catalog在智慧联想浏览器中打不开&#xff0c;要在火狐中才能打开下载。 2.win7如…

Navicat(数据库可视化软件)安装教程以及连接MYSQL

Navicat安装教程以及连接MYSQL Navicat&#xff08;数据库可视化软件&#xff09;安装流程安装MySQLnavicat连接mysql数据库 Navicat&#xff08;数据库可视化软件&#xff09; Navicat 是一款专门为 MySQL 设计的可视化数据库 GUI 管理工具&#xff0c;我们可以在自己的计算机…

【HarmonyOS开发】共享包HAR和HSP的创建和使用以及三方库的发布

OpenHarmony提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包。 HAR与HSP都是为了实现代码和资源的共享&#xff0c;都可以包含代码、C库、资源和配置文件&…

Windows可以ping通ubuntu,但ubuntu无法ping通windows

使用了NAT网卡和桥接网卡&#xff0c;电脑连了WiFi&#xff0c;桥接网卡桥接到WLAN上&#xff0c;Windows可以ping通Ubuntu但反过来不行&#xff01; 1.可能是防火墙的问题&#xff0c;按照如下设置&#xff0c;无果 考虑是不是使用了两个网卡冲突了&#xff0c;取消NAT的链接 …

【Mybatis】Mybatis如何防止sql注入

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1、使用参数化的 SQL 语句&#xff1a; 2、使用动态 SQL 标签&#xff1a; 3、禁止拼接 SQL&#xff1a; 4、限制参数类…

SkyWalking 快速入门

SkyWalking 是一个基于 Java 开发的分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。 一、SkyWalking 简介 SkyWalking 是观察性分析平台和应用性能管理系统。 提供分布式追踪、服务网格…

SpringBoot的基础配置

问题导入 入门案例中没有引入spring-webmvc等依赖包&#xff0c;没有配置Tomcat服务器&#xff0c;为什么能正常启动&#xff1f;我们没有配置端口号&#xff0c;为什么端口是8080&#xff1f; 起步依赖 starter SpringBoot中常见项目名称&#xff0c;定义了当前项目使用的所…

AUTOSAR软件架构描述文档,AUTOSAR_EXP_LayeredSoftwareArchitecture

AUTOSAR软件架构描述文档&#xff0c;我们常见的经典的CP架构及OS双核等架构描述 下载链接&#xff1a;https://www.autosar.org/fileadmin/standards/R21-11/CP/AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf

71.乐理基础-打拍子-三连音的变体

上一个内容&#xff1a;70.乐理基础-打拍子-三连音-CSDN博客 首先常见的三连音如下图的样子&#xff1a; 三连音的变体遇到的次数并不会很多&#xff0c;可以不用看不用懂 三连音的变体&#xff1a; 1.三连音节奏型依然有可能藏有休止符&#xff0c;如下图 2.在这之前的三连音…

Java LinkedList解密

一、LinkedList最底层的原理 LinkedList其实底层是链表&#xff1a; 当初始化的时候&#xff0c;会将链表这个节点的值、prev指针和next指针初始化。 二、LinkedList初始化 无参构造并没有做什么。有参构造会先调用无参构造&#xff0c;然后调用addAll方法将链表的节点都初始化…
最新文章