百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

DataX数据异构、数据同步神器 数据异步是什么意思

ccwgpt 2024-12-30 02:23 46 浏览 0 评论

需求背景

需求一:前段时间,公司进行一个十年老系统重构,其中涉及到很多数据库、表的迁移,基本思路就是大表通过定时任务分片同步,小表通过rest接口的方式同步数据,所以其中开发了大量只使用一次的代码;

需求二:在做数据异构时,比如将Mysql数据库表同步到ES或者ADB时,其中需要进行一定的数据清洗和过滤,所以增量数据通过订阅binglog放到MQ中进行监听处理,历史全量数据通过定时任务或者将历史数据灌到一个新的数据库,也通过订阅binglog放到MQ中进行相同的处理,如果涉及到ES索引重建,那么需要重复操作以上流程;

需求三:大表的数据归档,比如财务的清结算数据,业务方只关心最近几个月的数据,类似业务表数据量越来越大,很可能产生慢查询、锁表等一系列问题,所以需要将历史数据有规划的进行数据归档。但是以上看似很简单的操作如果不通过程序实现,那么就需要依赖DBA实施;

以上列举了工作中经常会遇到的场景,当然类似的需求还有很多很多。通过以上分析,我们不难发现目前的做法开发成本、资源成本较高。那么我们需要通过什么手段来解决以上问题呢?最近调研了一些资料,感觉DataX基本上可以非常简单完成以上功能。

官网地址:https://github.com/alibaba/DataX

设计理念

DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

架构设计

大家在用过 IDEA 的时候都知道,IDEA 有很多非常棒的插件,用户可根据自身编程需求,下载相关的插件,DataX 也是使用这种可插拔的设计,采用了 Framework + Plugin 的架构设计,如下图所示:

有了插件,DataX 可支持任意数据源到数据源,只要实现了 Reader/Writer Plugin,官方已经实现了主流的数据源插件,比如 MySQL、Oracle、SQLServer 等,当然我们也可以开发一个 DataX 插件。

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

Wiriter: 数据写入模块,负责不断向Framwork取数据,并将数据写入到目的端。

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

运行原理

DataX 核心主要由 Job、Task Group、Task、Schedule、Channel 等概念组成:

Job:单个作业的管理节点,负责数据清理、子任务划分、TaskGroup监控管理。

Task:由Job切分而来,是DataX作业的最小单元,每个Task负责一部分数据的同步工作。

Schedule:将Task组成TaskGroup,单个TaskGroup的并发数量为5。

TaskGroup:负责启动Task。

Channel:DataX 会单独启动一条线程运行运行一个 Task,而 Task 会持有一个 Channel,用作 Reader 与 Writer 的数据传输媒介,DataX 的数据流向都是按照 Reader—>Channel—>Writer 的方向流转。Channel 作为传输通道,即能充当缓冲层,同时还能对数据传输进行限流操作。

调度流程

DataX 将用户的 job.json 同步作业配置解析成一个 Job,DataX 通过 JobContainer 完成全局切分、调度、前置语句和后置语句等工作,整体调度流程用如下图表示:

操作实战

1.下载地址: http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

2.解压

3.运行自检脚本 bin/datax.py job/job.json

出现以上命令框代表环境可用。

4.通过命令行测试mysql数据库表之间同步,表c_s同步到c_s1,首先编写同步脚本,vim /job/mysql-mysql.json

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": [
                            "id",
                            "c_name"
                        ], 
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:mysql://127.0.0.1:3306/mybd"
                                ], 
                                "table": [
                                    "c_s"
                                ]
                            }
                        ], 
                        "password": "root", 
                        "username": "root"
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
                        "column": [
                            "id",
                            "cname"
                        ], 
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/mybd",
                                "table": [
                                    "c_s1"
                                ]
                            }
                        ], 
                        "password": "root", 
                        "username": "root", 
                        "writeMode": "replace"
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": "2"
            }
        }
    }
}

然后执行脚本,bin/datax.py job/mysql-mysql.json

数据表中的3条数据同步完成。

5.通过命令行测试mysql数据同步ES,表c_s同步到索引c_s上,首先编写同步脚本,vim /job/mysql-es.json

{
  "job": {
      "setting": {
          "speed": {
              "channel": 1,
              "record": -1,
              "byte": -1
          }
      },
      "content": [{
          "reader": {
              "name": "mysqlreader",
              "parameter": {
                  "username": "root",
                  "password": "root",
                  "column": [
                      "id",
                      "c_name"
                  ],
                  "splitPk": "id",
                  "connection": [{
                      "table": [
                          "c_s"
                      ],
                      "jdbcUrl": [
               "jdbc:mysql://127.0.0.1:3306/mybd"
                      ]
                
                  }]
              }
          },
          "writer": {
              "name": "elasticsearchwriter",
              "parameter": {
                  "endpoint": "http://es-cn-xxxxx.elasticsearch.aliyuncs.com:9200",
                  "index": "c_s",
                  "type": "default",
                  "accessId": "elastic",
                  "accessKey": "xxxxxx",
                  "settings": {"index" :{"number_of_shards": 1, "number_of_replicas": 0}},
                  "discovery": false,
                  "batchSize": 5000,    
                  "splitter": ",",
                  "column": [
                    {"name": "id", "type": "id"},
                    { "name": "cname","type": "text" }
                  ]
              }
          }
      }]
  }
}

然后执行脚本,bin/datax.py job/mysql-es.json

Mysql数据同步ES完成,索引如下图:

以上是Datax实现的基本数据源同步插件功能,如果我们需要将Mysql的数据同步到MQ中,需要去开发插件,后期继续开发出统一的MQ Writer插件,这样就能实现复杂的业务处理数据异构场景啦。

操作界面

以上是通过脚本实现数据异构的同步,但是这样是不够方便灵活的,阿里开源的时候并没有提供可视化界面,好在已经有大佬开源了一套datax-web:https://github.com/WeiYe-Jing/datax-web 前端界面,我们可以通过界面灵活的进行脚本配置和执行,界面如下:

不断分享开发过程用到的技术和面试经常被问到的问题,如果您也对IT技术比较感兴趣可以「关注」我

相关推荐

PPT 139 | 粉色渐变小清新春暖花开PPT模板

春暖花开,这是你制作PPT的世界粉色渐变小清新春暖花开PPT模板,共22P适用场合:工作总结/个人汇报/演讲培训等喜欢的可以赞一个更多类似PPT模板,搜【小清新】也可以,在线编辑,一键下载...

框架完整岗位竞聘报告PPT模板

需要源文件de可私!氢元素为您提供PPT模板、PNG元素免费、办公模板。工作述职汇报、计划总结、培训课件、节日庆典、营销策划、商业计划、宣传企业、产品发布、个人简历、毕业答辩、岗位竞聘、护理培训,...

PPT与视频相关的几个操作要点

都知道PPT中可以插入视频,而2010及以上版本插入后还可以对视频做各种处理,另外别忘了还可以直接将PPT导出成视频格式。插入视频方式往PPT中插入视频,除了【插入】|【视频】|【PC上的视频】这种方...

书写主题品管圈汇报PPT模板,主题框架,简约设计,品管圈必备

Hello大家好,我是帮帮。今天跟大家分享一张书写主题品管圈汇报PPT模板,主题框架,简约设计,品管圈必备。有个好消息!为了方便大家更快的掌握技巧,寻找捷径。请大家点击文章末尾的“了解更多”,在里面找...

【教学成果框架图】国家级获奖案例解析与可视化方案(实战版)

教学成果逻辑框架图的绘制精髓总结为“逻辑为骨,视觉为翼”。下面结合具体案例,手把手教你制作既专业又美观的成果框架图。一、设计理念:教育逻辑与视觉传达的融合教学成果框架图需体现三重逻辑:教育目标层(立德...

工作总结PPT模板完整框架 (30)

年中汇报PPT的超强框架来袭,职场人士的必备神器!

这套框架堪称完美,适用于各类工作汇报场景。它逻辑清晰,内容丰富,涵盖个人介绍、工作回顾、业绩成果、问题分析以及未来工作计划等常见汇报模块。PPT已包含600多页,所有元素均可自由编辑,数据图表也能轻松...

三个说话框架,提升逻辑思维,让你清晰表达

#暑期创作大赛#建立清晰的逻辑思维:三个说话框架的力量我们生活在一个充满语言交流的世界中。无论是在学校,工作场所,还是在社交场合,我们都需要有效地表达我们的观点和想法。然而,许多人都有表达上的困扰,他...

《石头记》人物原型故事之逻辑框架(一)

话说空空道人将《石头记》带往人世,又经东鲁孔梅溪醒题《风月宝鉴》,曹雪芹定名《金陵十二钗》,加之警幻仙子提醒防备新谱《红楼梦十二支曲》。蛮以为他人在闲适风月故事之于能够了然背后真实故事,怎耐一万年老怪...

如何搭建高效沟通与精彩演讲的逻辑结构

对于大多数人而言,说话有逻辑这件事难于登天。很多人在演讲、工作汇报中都会遇到诸如“我不知道你在说什么”、“你的重点是什么”、“你说话毫无逻辑”此类的评价,被认为是说话缺乏逻辑的人。那么如何成为一个说话...

「书讯」论证逻辑框架下说理写作模式研究

《论证逻辑框架下说理写作模式研究》作者:金建龙出版日期:2018年11月开本:16开出版社:经济管理出版社小编推荐提升大学生批判意识和理性说理能力是新时代背景下高等教育中通识教育和博雅教育的全新探索...

【一元脑花】青少年4D逻辑训练的基本框架

一、核心训练模块多维认知构建资源分布图谱:通过分析社会资源层级与流动规律,建立立体空间认知模型2DOC时空维度整合:将历史局势演变(纵向时间轴)与未来趋势预判(横向可能性轴)结合训练2DOC动态干预系...

提升写作逻辑,这5个框架你搭建好了吗?

每个人都有写作的愿望,也都想表达心中浩荡的情感,但多年过后,许多人依旧卡在“无话可说”“写不出结构”的怪圈里。有人慨叹:“浮云一别后,流水十年间”,梦想与现实总有一道沟壑横亘——此岸是满腹心事,彼岸...

2023年主观题法治思想知识框架图

...

学霸:2天吃透初一语文上学期核心预习知识框架图|暑假弯道超车

学霸:2天吃透初一语文上学期核心预习知识框架图|暑假弯道超车。具体如下:查看作者的个人主页获悉剩余的~...

取消回复欢迎 发表评论: