CN115905413A - 一种基于Python协程和DataX的数据同步平台 - Google Patents
一种基于Python协程和DataX的数据同步平台 Download PDFInfo
- Publication number
- CN115905413A CN115905413A CN202310057147.3A CN202310057147A CN115905413A CN 115905413 A CN115905413 A CN 115905413A CN 202310057147 A CN202310057147 A CN 202310057147A CN 115905413 A CN115905413 A CN 115905413A
- Authority
- CN
- China
- Prior art keywords
- data
- task
- database
- module
- synchronization
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Python协程和DataX的数据同步平台,所述平台包括:对分布在不同地域下的异构数据库进行数据同步、数据迁移、数据订阅、数据校验;监控异构数据库之间的数据同步、数据迁移、数据订阅、数据校验等操作;界面化操作为用户屏蔽数据同步平台底层的复杂执行逻辑;用户可以根据开源工具DataX自定义数据操作之前的初始化操作、以及数据操作之后的后置操作;数据同步平台可以辅助用户进行数据库容灾;支持用户使用不同的存储介质存储不同热度数据,降低存储成本;用户本地搭建该数据同步平台,只需将配置文件中的相关服务器资源进行替换即可。
Description
技术领域
本发明涉及异构数据库数据同步领域,实现了一种基于Python协程和DataX的数据同步平台。
背景技术
数据库技术蓬勃发展,每种数据库都有自己的特点,以及其适合的场景。因此在生产环境中,开发者有了更多的数据库选择,甚至选择组合数据库方案。因此,异构数据库之间的DTS需求日益明显。其中,DTS(Data Transmission Service, 数据传输服务)可帮助用户在业务正常运行的前提下完成数据库迁移、同步等操作,其可以利用实时同步通道轻松构建安全、可扩展、高可用的数据架构。DTS能通过数据订阅等操作为用户实现商业数据挖掘、业务异步解耦等需求。
在有些场景中,比如随着业务的快速发展和用户的持续增长,需要把业务进行多地域部署(异地部署)。如果该业务的某些用户在地理位置上的分布较为分散,那么地理位置较远的用户在访问业务时就会出现较高延迟,影响用户体验;并且如果将业务部署在唯一地理单元,那么当该业务的此地理单元出现问题时,用户所访问的业务就会崩溃。因此将该业务部署在多地理单元,既能让所有用户较低延迟访问服务,就近访问服务,提升用户体验;又可以实现业务数据的灾备问题。因此这就需要DTS服务进行不同业务地理单元之间的数据同步,保证各地数据一致性等。
除此之外,目前市面上很多公有云厂商都已经提供了DTS服务,虽然可靠性较高,但是成本也很高。并且一般公有云厂商所提供的DTS服务与自家云数据库产品的耦合度较高,对于该云厂商之外的异构数据库支持不是很好;另外,不同用户对于DTS的需求不一样,因此许多公有云厂商所提供的DTS虽然可以较好地实现数据同步,但是在数据订阅、不活跃数据、存储周期较长数据的冷存储等方面,不能满足不同用户之间的需求。
发明内容
本发明的目的在于针对现有数据同步技术的局限性而提出的一种基于Python协程和DataX的数据同步平台,其可以在对基准数据库和目标数据库侵入性较小的情况下,实现异构数据库之间的数据同步。该平台支持用户基于自有的服务器资源,构建稳定、可靠、高效、可定制化、支持分层存储的数据同步平台,使得用户在满足自身需求的前提下,为用户提供低成本、稳定高效的数据操作服务。
实现本发明目的的具体技术方案是:
一种基于Python协程和DataX的数据同步平台,特点是所述平台包括:
数据同步模块、数据迁移模块、数据备份模块、数据对比模块、数据订阅模块以及监控模块,其中,
所述数据同步模块,使用控制台或者文件接收用户数据同步任务的参数配置,生成数据同步组件执行数据同步任务所需的JSON配置文件,执行最终的数据同步任务;对数据同步任务所需的JSON配置文件进行参数审核,检查JSON配置文件中配置参数是否合法,参数属性是否存在;数据同步模块中,数据同步任务目标为将基准数据库中待同步数据表中的数据同步到目标数据库中指定数据表;数据同步组件基于开源数据同步组件DataX设计实现,数据同步任务的执行依赖于数据同步组件,数据同步组件使用数据同步模块中Python多进程和多协程并发执行任务的数据同步方法完成数据同步任务;基于Python多进程和多协程划把数据同步任务分割为多个数据同步子任务,每个数据同步子任务处理数据同步任务中的一部分数据,针对基准数据库中每张数据表启动一个Python进程,每个Python进程中多个协程并行处理数据表中的数据,完成数据同步子任务,最后完成整个数据同步任务;数据同步模块中的基准数据库,就是待同步数据库,以该数据库为基准,使用该数据库中的数据对目标数据库中对应的数据存储单元进行完全的数据覆盖,关系型数据库中的数据存储单元即为行列结构的数据表;数据同步模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据同步任务;数据同步模块包含数据同步任务队列,数据同步模块从数据同步任务队列取出待执行的数据同步任务,并行执行数据同步任务;
所述数据迁移模块,使用控制台或者文件接收用户数据迁移任务的参数配置,并生成数据迁移组件执行数据迁移任务所需的JSON配置文件,执行最终的数据迁移任务;数据迁移模块中,数据迁移目标为将基准数据库中的所有数据迁移到目标数据库中,此处的数据迁移是针对基准数据库中所有数据表中全部数据的全量迁移;数据迁移组件基于开源数据同步组件DataX设计实现,数据迁移任务的执行依赖于数据迁移组件,数据迁移组件使用数据迁移模块中Python多进程和多协程并发执行任务的数据迁移方法完成数据迁移任务;数据迁移模块中的基准数据库,就是待迁移数据库,将该数据库中的所有数据全部迁移到目标数据库,或者迁移到NFS或OSS存储中;数据迁移模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据迁移任务;
所述数据备份模块,使用控制台或者文件接收用户数据备份任务的参数配置,并生成数据备份组件执行数据备份任务所需的JSON配置文件,完成最终的数据备份任务;对数据备份任务所需的JSON配置文件进行参数审核,检查JSON配置文件中配置参数是否合法,参数属性是否存在;数据备份模块对多基准异构数据库以及一个目标异构数据库进行数据备份任务;数据备份模块中,数据备份流程是将基准数据库中所有数据表的全部数据备份到多地域的多类型存储介质中,实现基准数据库中全量数据的异地多活备份;数据备份组件基于开源数据同步组件DataX设计实现,数据备份任务的执行依赖于数据备份组件,数据备份组件使用数据备份模块中Python多进程和多协程并发执行任务的数据备份方法完成数据备份任务;数据备份模块中的基准数据库,就是待备份数据库,将该数据库中的所有数据全部备份到目标数据库,或者备份到NFS或OSS存储中;数据备份模块支持用户自定义数据备份周期以及选择备份存储介质;数据备份模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据备份任务;
所述数据对比模块,使用控制台或者文件接收用户数据对比任务的参数配置,对数据对比任务进行数据实例化操作,完成数据对比任务;数据对比流程是将基准数据库与目标数据库中所有数据表中的数据进行对比,数据对比模块基于Python多进程和多协程并发执行任务的数据并行方法进行数据库之间多级别的数据对比,避免所述数据对比模块中基准数据库与目标数据库直接进行全量数据对比所带来的开销,对比任务完成后生成数据对比结果,然后根据数据对比结果进行消息通知;数据对比任务在多Python协程中执行,由监控模块监控任务进度;数据对比模块的基准数据库,就是待对比数据库,以该数据库为基准,目标数据库中的数据一旦与该数据库中的数据不一致,就要把差异结果输出到控制台;多级别的数据对比包括:数据表、视图、存储过程、存储函数和触发器数据库对象级别的差异对比,数据表的数据总量进行对比,以及每张数据表中数据记录项的对比;数据对比模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据对比任务;
所述数据订阅模块,用户界面化进行数据订阅任务的配置,用户需要添加数据订阅任务的参数,生成最终配置的数据订阅任务;数据订阅模块中,数据订阅分为单向增量数据订阅和双向增量数据订阅;单向增量数据订阅是以基准数据库为基准,数据订阅模块监测基准数据库,当该数据库中的数据发生改变时,变化数据被更新到另一个数据库中,实现数据订阅;双向增量数据订阅涉及两个数据库即第一数据库和第二数据库,数据订阅模块监测第一数据库,第一数据库中的数据发生改变时,变化数据被更新到第二数据库中,此时第一数据库是基准数据库,第二数据库是目标数据库,并且,数据订阅模块同时检测第二数据库,第二数据库中的数据发生改变时,变化数据被更新到第一数据库中,此时第二数据库是基准数据库,第一数据库是目标数据库,实现双向数据订阅;数据订阅模块中的数据订阅组件基于开源数据订阅组件Otter实现,数据订阅任务的执行依赖于数据订阅组件,用户界面化操作数据订阅组件,添加数据订阅任务的参数;数据订阅模块支持用户配置定时数据订阅任务;数据订阅模块将数据订阅组件安装流程封装在Helm脚本中,用户直接通过Helm脚本在本地部署数据订阅模块;
所述监控模块,监控数据同步模块、数据迁移模块、数据备份模块、数据对比模块和数据订阅模块的操作,将操作记录保存在监控模块的日志文件中;并且,监控模块使用Linux内置mpstat、iostat、free系统命令监控服务器中的CPU、I/O和内存资源使用情况,监控信息存放在监控文件中。
其中,数据同步模块,所述使用控制台或者文件接收用户数据同步任务的参数配置,生成数据同步组件执行数据同步任务所需的JSON配置文件,执行最终的数据同步任务,具体包括:
Python多进程读取异构数据库数据同步任务所需的配置参数,配置参数包括基准数据库地址、待同步数据表、待同步数据字段、目标数据库地址和数据同步速率;
执行数据同步任务时,数据同步任务执行进度显示在用户控制台上,任务执行日志存储在所述监控模块的日志文件中。
数据备份模块,所述对数据备份任务所需的JSON配置文件进行参数审核,若审核通过,则其按照构建后的数据备份任务JSON文件进行数据备份任务;否则,用户重新提交数据备份任务参数。
所述数据备份模块支持用户自定义数据备份周期以及选择备份存储介质,包括:
用户自定义待备份数据库的数据备份周期,以及备份任务的触发时间;
用户自定义数据备份的存储介质以及存储位置;
用户周期性备份操作被记录在所述的监控模块的日志文件中。
所述数据对比模块基于Python多进程和多协程并发执行任务的数据并行方法进行数据库之间多级别的数据对比,避免所述数据对比模块中基准数据库与目标数据库直接进行全量数据对比所带来的开销,包括:
对于异构数据库之间多级别数据对比任务,数据对比方法顺序进行不同级别的数据对比;
使用Python多进程针对不同数据表进行数据表比较,其中使用Python多协程进行数据表中分组数据记录项的对比;
基于Checksum数据表值对数据表所有数据进行比较;
基于每张数据表中分组数据的MD5值进行数据记录级别的比较。
所述数据对比流程是将基准数据库与目标数据库中所有数据表中的数据进行对比,在进行多级别数据对比时,如果较高级别数据存在差异,即基准数据库与目标数据库之间的数据表结构出现差异,则不再进行后续级别的数据记录差异比较;否则,继续进行数据表的数据总量以及每张数据表中数据记录项的对比。
所述数据对比任务在多Python协程中执行,如果任务超时或者任务执行失败,数据同步平台返回任务超时、执行失败的信息,任务执行失败信息被记录在监控模块的日志文件中。
所述数据订阅模块监测基准数据库,具体为:对基准数据库与目标数据库之间的增量数据进行数据同步,当检测到基准数据库的数据库数据发生变化时,自动触发增量数据订阅流程。
所述数据订阅模块支持用户配置定时数据订阅任务,具体为:用户预设增量数据同步时间,当到达预设时间时,数据订阅模块获取基准数据库中发生变化的数据,将此部分发生变化的数据作为增量数据,并将此部分增量数据与待订阅历史数据进行合并,作为同步增量数据,用作单向增量数据订阅以及双向增量数据订阅所需的变化数据。
所述数据订阅模块将数据订阅组件安装流程封装在Helm脚本中,用户直接通过Helm脚本在本地部署数据订阅模块,具体为:用户使用Helm脚本一键安装数据订阅模块以及启动Canal、Zookeeper、Node组件,通过宿主机IP和端口将组件地址暴露出来。
本发明构建了一种基于Python协程和DataX的数据同步平台,包括:数据同步模块、数据迁移模块、数据备份模块、数据对比模块、数据订阅模块,以及监控模块。与现有技术相比,本发明具有一定优点:此发明中的数据同步模块支持多数据库之间的离线数据数据同步,支持多种类型数据源;数据订阅模块支持多数据库之间的数据准实时同步,界面化操作降低了使用成本;相比传统的数据同步方法——快照法、触发器法,此发明中的数据同步模块基于数据同步开源组件构建数据同步组件,在无额外代码侵入基准数据库和目标数据库的情况下,实现了用户可自定义、可自行扩展的数据库同步组件;此发明中的数据同步模块、数据迁移模块、数据备份模块、数据对比模块都使用了Python多进程和多协程并行执行任务的数据操作方法,提升了数据同步、数据迁移、数据备份、数据对比任务的执行效率;数据备份模块中用户自定义使用不同存储介质,访问频率较低的数据存储在较低成本的存储介质中,降低了数据备份成本;数据对比模块中进行基准数据库与目标数据库之间的多级别数据对比,避免基准数据库与目标数据库直接进行全量数据对比所带来的开销,提升了数据对比的效率;此发明具有使用简单、可扩展性强、执行效率高的特点。
应当明确,以上的一般描述和后文的具体实例描述仅仅是示例性和解释性的,不能限制此发明。
附图说明
图1是本发明实施例提供的一种数据同步平台的系统整体架构图;
图2是本发明实施例中DataX架构设计图;
图3是本发明提供的一种数据同步作业的生命周期示意图;
图4是本发明实施例中Otter工作原理图;
图5是本发明实施例提供的一种数据校验管理方法的流程示意图。
具体实施方式
以下描述和附图充分地显示了本发明的具体实施方案,以使本领域的技术人员能够实践它们。除以下专门提及的内容之外,本发明数据同步平台的整体构建过程、构建方法等,均为本领域的公知常识。
对于数据同步平台所涉及的数据操作,多为不同数据源之间的数据操作,比如不同数据源之间的数据同步、数据迁移、数据对比、数据订阅操作。
下面首先对本发明中出现的名词进行解释:
Python协程(Coroutine):Python协程又被称为微线程,多个协程可以在一个Python线程中运行(即Python协程是单线程运行的),可以实现“并发”。多协程相比于线程的优势是其多协程省去了多线程之间的切换开销,其中Python协程是由用户程序主动控制切换的,因此,Python多协程运行效率极高。Python开发中可以基于asyncio协程模块实现Python协程开发中的异步I/O。Python协程在I/O密集型任务场景中,有很高的执行效率,在单线程内部其不用受到GIL的限制;而对于CPU密集型任务场景中,可以使用多进程+多线程的开发方式,在保证协程执行高效率的同时,又能充分利用多核处理能力。
DataX:DataX是阿里云上DataWorks数据集成服务的开源版本,其是目前在国内被广泛使用的离线数据同步平台。其可以实现市面上主流数据库,比如MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive等多异构数据源之间的数据同步需求。并且,为了解决异构数据源同步问题,DataX将复杂的同步链路转化为了星型数据链路。开发者目前可以基于DataX实现整库迁移、批量上云等操作。DataX中数据源数据读取插件为Reader插件,数据写入目标数据源插件为Writer插件。
Otter:Otter是阿里巴巴所开源的一个分布式数据库同步系统。其基于数据库增量日志解析,可以将数据准实时同步到本地机房或异地机房的mysql/oracle数据库中。其中,Canal属于Otter中的一个核心组件,Otter可以使用Canal获取数据库增量日志数据。同时,Otter也支持接入其它的组件、系统获取其它数据,实现其它系统功能等。比如,Otter中还使用了Manager+Node系统管理架构;同时,Otter还使用了Zookeeper组件,用于解决任务的分布式调度,允许多Node之间协同工作。
Canal:Canal是阿里巴巴所开源的用于订阅和消费增量数据的开源组件。其主要用途是基于MySQL数据库增量日志解析(其可以获取数据库增量日志数据),提供增量数据订阅和消费。其中,基于日志增量订阅和消费的业务包括数据库镜像、数据库实时备份、带业务逻辑的增量数据处理等。
实施例1
本实施例提供了一种利用本发明将Mysql数据库中数据同步抽取到本地控制台的过程。将数据从Mysql数据库抽取到本地后可以在本地检查Mysql数据库中指定数据表中的数据,此任务在图1所示数据同步模块中完成的,整个过程包含以下步骤,
步骤一:用户在控制台中输入数据源以配置及任务配置相关信息,源数据库账号、密码,待查询数据表,待连接数据库的jdbcUrl;除此之外,用户自定义图3中每个TaskGroup中的并发Task数量。
步骤二:数据同步模块后台监听数据同步任务,针对数据同步任务中基准数据库的每张数据表,数据同步组件启动Python进程,每个Python进程执行每张数据表的数据同步任务。每张数据表中有大量待操作数据项,Python多协程将数据同步任务切割为数据同步子任务,每个协程会执行数据同步子任务。
步骤三:每个协程构建数据同步子任务所需要的JSON配置文件,通过JSON配置文件中DataX TableMode下的column、where参数或者QuerySQLMode下的querySql参数进行待操作数据项的自定义,分割每张数据表中待操作数据项,每个数据同步子任务包含分割好的部分待操作数据项。
步骤四:基于Python环境下的DataX,每个协程运行命令python bin/datax.pyjob/table01_part1.json,执行数据同步子任务。
步骤五:用户在本地控制台查看任务的执行状态,如果任务执行过慢,用户可以将JSON配置文件中Channel参数调大一些;如果任务执行占用资源过高,用户可以在JSON配置文件中操作操作参数限制任务执行速率,以及调整并发执行任务数量。
从Mysql数据库读取数据到本地的数据同步任务所对应的JSON文件配置文件如下,
{
"job": {
"setting": {
"speed": {
"channel": 5
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [
"id",
"stuid",
"name",
"hobby",
"address"
],
"where":"id>50 and id<200"
"splitPk": "id",
"connection": [
{
"table": [
"Table0",
"Table1",
"Table2",
"Table3",
"Table4",
"Table5",
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/studentDatabase"
]
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"print":true
}
}
}
]
}
}
数据同步任务JSON配置文件参数解读如下,
JdbcUrl,描述端到端的JDBC连接信息,该参数的值为JSON数组,即
读取端地址可以为多个。因为数据同步组件支持多IP探测,因此当配置了多个读取端地址时,数据同步组件中DataXReaderPlugin可以依次探测IP的合法性,直到选到了一个合法的读取端IP为止。如果所有读取端地址连接失败,ReaderPlugin报错。
Username,数据源用户名。
Password,数据源密码。
Table,描述所需要进行数据同步或者数据迁移的数据表,该参数的值为JSON数组。当此处JSON数组元素不为一个时,则表示此任务需要对多张数据表完成数据同步、迁移的操作。
Column,描述数据表中需要进行数据同步和数据迁移的数据列,该参数的
值为JSON数组。此处的数据列可以为整张表中的部分列,数据列集合顺序可以和数据表中的数据列顺序不一致。用户可以使用*代表数据表中的所有数据列。
splitPk,用户在DataX.json文件中指定splitPk之后,就代表用户希望使用splitPk的值字段进行数据分片,DataX会对数据记录按照splitPk字段进行Task的分割。从而DataX会执行多Task并发的操作,进行数据同步、迁移等。通常情况下推荐使用数据表主键字段作为splitPk,因为数据表主键通常情况下分布会比较均匀。
实施例2
本实施例提供了一种利用本发明将Mysql数据库中数据迁移到HDFS文件的过程。在大数据分析场景与机器学习场景中,很多应用对数据访问的吞吐性能和延迟时延有较高的要求。文件存储HDFS提供高吞吐性能和低延迟的访问能力,并且无需把分析数据、训练数据迁移到本地,在该场景下使用文件存储HDFS比较合适。MySQL数据库与HDFS属于不同结构数据源,此发明中的数据迁移模块支持不同数结构据源之间的数据迁移。具体的步骤如下,
步骤一: 用户在控制台输入Mysql数据源的配置信息,以及目标数据源HDFS的配置信息。因为HDFS文件存储所涉及的数据量一般比较大,用户可以通过数据迁移任务JSON文件中的byte和record参数自定义数据迁移任务执行速率。
步骤二:数据迁移模块后台监听数据同步、数据迁移任务,针对基准数据库MySQL中的每张数据表,数据迁移组件启动Python进程,每个Python进程执行每张数据表的数据迁移任务。每张MySQL数据表中包含大量待迁移数据项,使用Python多协程对每张MySQL数据表中的多个数据表项进行操作,每个Python协程会执行单张数据表中部分数据表项的数据迁移子任务。
步骤三:每个协程构建数据迁移子任务的JSON配置文件,可以通过JSON配置文件中DataX TableMode下的column、where参数或者QuerySQLMode下的querySql参数进行待操作数据项的自定义,即对JSON配置文件中的参数进行配置,对每张数据表中待操作数据项进行分割,从而将数据迁移任务切割为多个数据迁移子任务。因为HDFS文件存储所涉及的数据量更大,因此数据迁移模块后台启动更多数量的Python协程,把每张MySQL数据表中的所有数据项划分为粒度更小的待操作数据单元组。
步骤四:基于Python环境下的DataX,每个协程运行命令python bin/datax.pyjob/table01_part1.json,从而执行该部分数据迁移子任务。其中table01_part1.json是数据迁移子任务所对应的JSON配置文件,所有的数据迁移子任务组成数据迁移任务。
步骤五:用户在本地控制台看到数据迁移任务的执行状态,如果任务执行过慢,用户可以将JSON配置文件中Channel参数调大一些,或者将byte、record速率参数值调大一些;如果任务执行占用资源过高,可以在JSON配置文件中通过参数限制任务执行速率,以及调整并发执行的任务数量。注意观察日志信息,确保大规模数据下的数据迁移操作正确完成。
从Mysql数据库中全量数据迁移到HDFS文件存储中的数据迁移任务JSON配置文件如下,
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"id",
"name",
"attr01",
"attr02",
"attr03",
"attr04",
"attr05",
"attr06"
],
"where": "id>=50 and id<=500",
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/studentDatabase"
],
"table": [
"baseTable01",
"baseTable02",
"baseTable03",
"baseTable04",
"baseTable05"
]
}
],
"password": "123456",
"splitPk": lid",
"username": "root"
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"column": [
{
"name": "col1",
"type": "TINYINT"
},
{
"name": "col2",
"type": "STRING"
},
{
"name": "col3",
"type": "INT"
},
{
"name": "col4",
"type": "BIGINT"
},
{
"name": "col5",
"type": "FLOAT"
},
{
"name": "col6",
"type": "DOUBLE"
},
{
"name": "col7",
"type": "STRING"
},
{
"name": "col8",
"type": "VARCHAR"
}
],
"compress": "gzip",
"defaultFS": "hdfs://127.0.0.1:8030",
"fieldDelimiter": "\t",
"fileName": "baseTable",
"fileType": "text",
"path": "/baseTable",
"writeMode": "append"
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
}
数据迁移任务JSON配置文件参数解读如下,
defaultFS,该参数所描述的是Hadoop HDFS文件系统namenode的节点地址。参数格式为,hdfs://ip:端口,比如,hdfs://127.0.0.1:8030。
fileType,目前数据迁移组件中DataXHdfsWriterplugin仅支持textfile和orcfile两种格式的文件,且文件内容存放的必须是一张逻辑意义上的二维表。
column,写入到HDFS文件存储的字段,不支持对部分列写入。为了与Hive中表关联,需要指定HDFS中所有列的字段名称和字段类型。
writeMode,表示hdfswriter写入数据前的数据清理模式。目前支持3种模式,分别为: append,写入前对hdfs中数据不进行任何处理,DataX hdfswriter直接使用fileName写入,并保证文件名不冲突;nonConflict,如果path目录下已经存在fileName前缀的文件,直接报错;truncate,如果path目录下已经存在fileName前缀的文件,则先删除后写入。
path,描述存储到Hadoop hdfs文件系统的路径信息,HdfsWriterplugin会根据DataX JSON文件的并发配置在Path文件目录下将数据写入到多个文件。
fieldDelimiter,这是数据迁移组件中DataX hdfswriter写入时的字段分隔符,对于textfile尤其需要用户保证写入hdfs文件的分隔符与在Hive上创建数据表时的分隔符一致,从而将hdfs写入数据与Hive数据表字段相关联,否则无法在Hive表中查到数据。
使用DataX中的HdfsWriterplugin时需要注意,HdfsWriterplugin支持的数据类型与关系型数据库所支持的数据类型不同,需要进行相关转换。比如,HdfsWriterplugin支持的数据类型为,数值型:TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE; 字符串类型:STRING,VARCHAR,CHAR; 布尔类型:BOOLEAN; 时间类型:DATE,TIMESTAMP;所以在使用HDFS作为读取端或者写入端时,需要注意按照图2中的DataX Framework要求对读写两端的数据类型进行映射。
其中,HdfsWriter的实现过程为,首先根据数据迁移任务JSON配置文件中所指定的Path,在hdfs文件系统上创建多个命名规则为"path_随机值"的临时文件;然后将写入HdfsWriter的数据写入到临时文件;之后将临时文件移动到用户指定目录下的文件(在文件名不重复的情况下,在该文件目录下创建新的文件,将之前临时文件中的数据拷贝到现在的文件中);最后删除临时文件目录。
实施例3
本实施例提供了一种利用本发明进行数据对比的过程。数据对比一般用于迁移后进行两个数据库之间数据的一致性验证,以及业务开发过程中测试数据库与主库之间的差异数据校验等。此发明中数据对比流程如图5所示,以两个MySQL数据库之间的数据对比为例。数据对比流程为,首先,进行数据库对象级别的对比,比如基准数据库和目标数据库中的数据表、视图、存储过程、存储函数、触发器等数据库对象是否一致;然后对各个数据表中的数据总量进行统计,对比数据总行数;最后,对比数据表内容,使用Checksum计算每张数据表的值,之后,对每张数据表中的没组数据记录以及每条数据记录进行MD5值的计算,然后将基准数据库和目标数据库中的数据按照数据表Checksum值、每张数据表每组数据记录的MD5值、每条数据记录的MD5值的粒度进行比较。具体步骤如下所示,
步骤一:用户控制台输入待进行对比的基准数据库与目标数据库的账号、密码,以及需要进行对比的数据表,或者直接进行全库数据表数据对比。
步骤二:基于Python多线程获取待比较数据表中的表结构、视图、存储过程、存储函数、触发器等数据库对象,将其使用DDL语句导出为文本文件,然后多线程进行文本数据的比较。
步骤三:基于Python多线程获取待比较数据表中的数据记录总数,如果数据记录总数不一致,则将数据表数据记录的不一致信息返回到控制台。
步骤四:基于Python多进程与Python多协程计算每张数据表的Checksum数值等。为多张数据表分配一个进程,然后在进程中启动多个协程,分别计算数据表的Checksum数值,每张数据表中分组数据的MD5值,以及使用多协程计算每条数据记录的MD5值。
步骤五:为多张数据表启动多个进程,在每个进程中使用轻量级多协程首先对比基准数据库与目标数据库中数据表的Checksum数值,如果两张数据表的Checksum数值一致,则说明两张数据表结构和内容一致,无需继续进行后续的对比;之后使用Python多协程对基准数据库与目标数据库中的数据表中数据进行分组对比,首先对比每组数据的MD5值,如果两组数据记录的MD5值一致,则该组数据完全一致;如果两组数据记录的MD5值不一致,则对比每条数据记录的MD5值,寻找差异数据记录。
步骤六:两张数据表的差异数据记录存储在临时文件中,控制台显示基准数据库与目标数据库之间的差异数据项,方便用户对比了解。
实施例4
本实施例提供了一种利用本发明进行数据订阅的过程。数据订阅功能帮助用户获取自建Mysql、Oracle数据库的(准)实时增量数据,用户可以根据自身业务需求自由消费数据库增量数据,比如实时同步异构数据源数据、数据业务异步接耦、包含复杂ETL的数据实时同步等。
此发明中的数据订阅模块提供基于binlog的增量数据订阅功能。为方便用户使用数据订阅模块,数据订阅模块使用helm脚本封装了数据订阅模块组件的快速部署安装,用户根据helm脚本快速搭建数据订阅环境。数据订阅模块进行数据订阅任务的步骤如下,以配置不同结果数据源之间的双向同步为例。因为数据数据同步组件基于Otter组件构建,所以实施例中数据双向同步过程会涉及到图4中的相关组件,
步骤一:使用Helm脚本在宿主机集群中安装Zookeeper集群,将Zookeeper节点对应的宿主机端口地址添加到数据同步组件界面中的zookeeper管理信息。
步骤二:使用Helm脚本在宿主机集群中安装好了多个Otter node组件,将Otternode对应的宿主机端口地址添加到数据同步组件界面中的Node管理信息中。
步骤三:启动宿主机上容器中的Otter node,在数据同步组件管理界面中的机器管理界面查看节点启动状态,确保节点启动成功。
步骤四:在数据同步组件管理界面中的配置管理界面添加数据源(比如用户自搭建的MySQL数据,或者云服务提供商提供的RDS产品等)配置信息,添加数据源配置信息后,验证数据源的可连接性。
步骤五:添加完成数据源之后,添加需要进行同步的数据表,如果需要同步整个数据库,把配置项中的schema name和table name均设置为*。(不建议同步整个库,因为同步某些系统库有一定安全风险)
步骤六:上述步骤为不同结构数据源之间的单向同步,如果要实现不同结构数据源之间的双向同步,还需要额外处理步骤以避免回环同步。因为双向回环算法会依赖系统表,用户要在不同结构数据源中需要进行双向同步的数据库上初始化所需数据表。具体的初始化SQL可以在数据同步界面"数据库初始化"选项处获取。
步骤七:配置数据双向同步时,需要配置两个Canal;而在配置单向同步时,只需配置一个Canal即可。如图4所示Canal是Otter的关键组件,Canal实际上可以看作是源库的伪Slave, 从而获取数据源的增量数据。
步骤八:在数据同步组件界面中的同步管理界面中添加Channel并开启数据一致性,然后创建两个pipeline。其中,需要把一个pipeline的"主站点"选项设置为"是",并将该pipeline的"支持ddl同步"选项设置为"是";将另一个pipeline的"主站点"选项设置为"否",把该pipeline的"支持ddl同步"选项设置为"否"。最后,注意配置pipeline之间的数据表映射关系。
步骤九:在两个不同结构数据源的相关数据表中添加相关数据,验证数据是否同步。
步骤十:在数据同步组件界面中添加相关监控规则,监控异构数据源双向同步过程中可能出现的一些问题。
以上所展示的实施例仅为本发明的较佳实施例而已,并不能来因此限制本发明,凡是依据本发明权利要求所作的等同修改,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于Python协程和DataX的数据同步平台,其特征在于,所述平台包括:
数据同步模块、数据迁移模块、数据备份模块、数据对比模块、数据订阅模块以及监控模块,其中,
所述数据同步模块,使用控制台或者文件接收用户数据同步任务的参数配置,生成数据同步组件执行数据同步任务所需的JSON配置文件,执行最终的数据同步任务;对数据同步任务所需的JSON配置文件进行参数审核,检查JSON配置文件中配置参数是否合法,参数属性是否存在;数据同步模块中,数据同步任务目标为将基准数据库中待同步数据表中的数据同步到目标数据库中指定数据表;数据同步组件基于开源数据同步组件DataX设计实现,数据同步任务的执行依赖于数据同步组件,数据同步组件使用数据同步模块中Python多进程和多协程并发执行任务的数据同步方法完成数据同步任务;基于Python多进程和多协程划把数据同步任务分割为多个数据同步子任务,每个数据同步子任务处理数据同步任务中的一部分数据,针对基准数据库中每张数据表启动一个Python进程,每个Python进程中多个协程并行处理数据表中的数据,完成数据同步子任务,最后完成整个数据同步任务;数据同步模块中的基准数据库,就是待同步数据库,以该数据库为基准,使用该数据库中的数据对目标数据库中对应的数据存储单元进行完全的数据覆盖,关系型数据库中的数据存储单元即为行列结构的数据表;数据同步模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据同步任务;数据同步模块包含数据同步任务队列,数据同步模块从数据同步任务队列取出待执行的数据同步任务,并行执行数据同步任务;
所述数据迁移模块,使用控制台或者文件接收用户数据迁移任务的参数配置,并生成数据迁移组件执行数据迁移任务所需的JSON配置文件,执行最终的数据迁移任务;数据迁移模块中,数据迁移目标为将基准数据库中的所有数据迁移到目标数据库中,此处的数据迁移是针对基准数据库中所有数据表中全部数据的全量迁移;数据迁移组件基于开源数据同步组件DataX设计实现,数据迁移任务的执行依赖于数据迁移组件,数据迁移组件使用数据迁移模块中Python多进程和多协程并发执行任务的数据迁移方法完成数据迁移任务;数据迁移模块中的基准数据库,就是待迁移数据库,将该数据库中的所有数据全部迁移到目标数据库,或者迁移到NFS或OSS存储中;数据迁移模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据迁移任务;
所述数据备份模块,使用控制台或者文件接收用户数据备份任务的参数配置,并生成数据备份组件执行数据备份任务所需的JSON配置文件,完成最终的数据备份任务;对数据备份任务所需的JSON配置文件进行参数审核,检查JSON配置文件中配置参数是否合法,参数属性是否存在;数据备份模块对多基准异构数据库以及一个目标异构数据库进行数据备份任务;数据备份模块中,数据备份流程是将基准数据库中所有数据表的全部数据备份到多地域的多类型存储介质中,实现基准数据库中全量数据的异地多活备份;数据备份组件基于开源数据同步组件DataX设计实现,数据备份任务的执行依赖于数据备份组件,数据备份组件使用数据备份模块中Python多进程和多协程并发执行任务的数据备份方法完成数据备份任务;数据备份模块中的基准数据库,就是待备份数据库,将该数据库中的所有数据全部备份到目标数据库,或者备份到NFS或OSS存储中;数据备份模块支持用户自定义数据备份周期以及选择备份存储介质;数据备份模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据备份任务;
所述数据对比模块,使用控制台或者文件接收用户数据对比任务的参数配置,对数据对比任务进行数据实例化操作,完成数据对比任务;数据对比流程是将基准数据库与目标数据库中所有数据表中的数据进行对比,数据对比模块基于Python多进程和多协程并发执行任务的数据并行方法进行数据库之间多级别的数据对比,避免所述数据对比模块中基准数据库与目标数据库直接进行全量数据对比所带来的开销,对比任务完成后生成数据对比结果,然后根据数据对比结果进行消息通知;数据对比任务在多Python协程中执行,由监控模块监控任务进度;数据对比模块的基准数据库,就是待对比数据库,以该数据库为基准,目标数据库中的数据一旦与该数据库中的数据不一致,就要把差异结果输出到控制台;多级别的数据对比包括:数据表、视图、存储过程、存储函数和触发器数据库对象级别的差异对比,数据表的数据总量进行对比,以及每张数据表中数据记录项的对比;数据对比模块支持使用Linux内置的Cron进程和Shell脚本设置定时数据对比任务;
所述数据订阅模块,用户界面化进行数据订阅任务的配置,用户需要添加数据订阅任务的参数,生成最终配置的数据订阅任务;数据订阅模块中,数据订阅分为单向增量数据订阅和双向增量数据订阅;单向增量数据订阅是以基准数据库为基准,数据订阅模块监测基准数据库,当该数据库中的数据发生改变时,变化数据被更新到另一个数据库中,实现数据订阅;双向增量数据订阅涉及两个数据库即第一数据库和第二数据库,数据订阅模块监测第一数据库,第一数据库中的数据发生改变时,变化数据被更新到第二数据库中,此时第一数据库是基准数据库,第二数据库是目标数据库,并且,数据订阅模块同时检测第二数据库,第二数据库中的数据发生改变时,变化数据被更新到第一数据库中,此时第二数据库是基准数据库,第一数据库是目标数据库,实现双向数据订阅;数据订阅模块中的数据订阅组件基于开源数据订阅组件Otter实现,数据订阅任务的执行依赖于数据订阅组件,用户界面化操作数据订阅组件,添加数据订阅任务的参数;数据订阅模块支持用户配置定时数据订阅任务;数据订阅模块将数据订阅组件安装流程封装在Helm脚本中,用户直接通过Helm脚本在本地部署数据订阅模块;
所述监控模块,监控数据同步模块、数据迁移模块、数据备份模块、数据对比模块和数据订阅模块的操作,将操作记录保存在监控模块的日志文件中;并且,监控模块使用Linux内置mpstat、iostat、free系统命令监控服务器中的CPU、I/O和内存资源使用情况,监控信息存放在监控文件中。
2.根据权利要求1所述的数据同步平台,其特征在于,数据同步模块,所述使用控制台或者文件接收用户数据同步任务的参数配置,生成数据同步组件执行数据同步任务所需的JSON配置文件,执行最终的数据同步任务,具体包括:
Python多进程读取异构数据库数据同步任务所需的配置参数,配置参数包括基准数据库地址、待同步数据表、待同步数据字段、目标数据库地址和数据同步速率;
执行数据同步任务时,数据同步任务执行进度显示在用户控制台上,任务执行日志存储在所述监控模块的日志文件中。
3.根据权利要求1所述的数据同步平台,其特征在于,数据备份模块,所述对数据备份任务所需的JSON配置文件进行参数审核,若审核通过,则其按照构建后的数据备份任务JSON文件进行数据备份任务;否则,用户重新提交数据备份任务参数。
4.根据权利要求1所述的数据同步平台,其特征在于,所述数据备份模块支持用户自定义数据备份周期以及选择备份存储介质,包括:
用户自定义待备份数据库的数据备份周期,以及备份任务的触发时间;
用户自定义数据备份的存储介质以及存储位置;
用户周期性备份操作被记录在所述的监控模块的日志文件中。
5.根据权利要求1所述的数据同步平台,其特征在于,所述数据对比模块基于Python多进程和多协程并发执行任务的数据并行方法进行数据库之间多级别的数据对比,避免所述数据对比模块中基准数据库与目标数据库直接进行全量数据对比所带来的开销,包括:
对于异构数据库之间多级别数据对比任务,数据对比方法顺序进行不同级别的数据对比;
使用Python多进程针对不同数据表进行数据表比较,其中使用Python多协程进行数据表中分组数据记录项的对比;
基于Checksum数据表值对数据表所有数据进行比较;
基于每张数据表中分组数据的MD5值进行数据记录级别的比较。
6.根据权利要求1所述的数据同步平台,其特征在于,所述数据对比流程是将基准数据库与目标数据库中所有数据表中的数据进行对比,在进行多级别数据对比时,如果较高级别数据存在差异,即基准数据库与目标数据库之间的数据表结构出现差异,则不再进行后续级别的数据记录差异比较;否则,继续进行数据表的数据总量以及每张数据表中数据记录项的对比。
7.根据权利要求1所述的数据同步平台,其特征在于,所述数据对比任务在多Python协程中执行,如果任务超时或者任务执行失败,数据同步平台返回任务超时、执行失败的信息,任务执行失败信息被记录在监控模块的日志文件中。
8.根据权利要求1所述的数据同步平台,其特征在于,所述数据订阅模块监测基准数据库,具体为:对基准数据库与目标数据库之间的增量数据进行数据同步,当检测到基准数据库的数据库数据发生变化时,自动触发增量数据订阅流程。
9.根据权利要求1所述的数据同步平台,其特征在于,所述数据订阅模块支持用户配置定时数据订阅任务,具体为:用户预设增量数据同步时间,当到达预设时间时,数据订阅模块获取基准数据库中发生变化的数据,将此部分发生变化的数据作为增量数据,并将此部分增量数据与待订阅历史数据进行合并,作为同步增量数据,用作单向增量数据订阅以及双向增量数据订阅所需的变化数据。
10.根据权利要求1所述的数据同步平台,其特征在于,所述数据订阅模块将数据订阅组件安装流程封装在Helm脚本中,用户直接通过Helm脚本在本地部署数据订阅模块,具体为:用户使用Helm脚本一键安装数据订阅模块以及启动Canal、Zookeeper、Node组件,通过宿主机IP和端口将组件地址暴露出来。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310057147.3A CN115905413A (zh) | 2023-01-17 | 2023-01-17 | 一种基于Python协程和DataX的数据同步平台 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310057147.3A CN115905413A (zh) | 2023-01-17 | 2023-01-17 | 一种基于Python协程和DataX的数据同步平台 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115905413A true CN115905413A (zh) | 2023-04-04 |
Family
ID=86482068
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310057147.3A Pending CN115905413A (zh) | 2023-01-17 | 2023-01-17 | 一种基于Python协程和DataX的数据同步平台 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115905413A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116521652A (zh) * | 2023-07-03 | 2023-08-01 | 南方电网数字电网研究院有限公司 | 一种基于DataX实现分布式异构数据库迁移方法、系统和介质 |
CN118606410A (zh) * | 2024-08-12 | 2024-09-06 | 深圳市智慧城市科技发展集团有限公司 | 异构数据的同步方法、设备及计算机可读存储介质 |
-
2023
- 2023-01-17 CN CN202310057147.3A patent/CN115905413A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116521652A (zh) * | 2023-07-03 | 2023-08-01 | 南方电网数字电网研究院有限公司 | 一种基于DataX实现分布式异构数据库迁移方法、系统和介质 |
CN116521652B (zh) * | 2023-07-03 | 2023-11-21 | 南方电网数字电网研究院有限公司 | 一种基于DataX实现分布式异构数据库迁移方法、系统和介质 |
CN118606410A (zh) * | 2024-08-12 | 2024-09-06 | 深圳市智慧城市科技发展集团有限公司 | 异构数据的同步方法、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10747714B2 (en) | Scalable distributed data store | |
US9940373B2 (en) | Method and system for implementing an operating system hook in a log analytics system | |
CN115905413A (zh) | 一种基于Python协程和DataX的数据同步平台 | |
US11321291B2 (en) | Persistent version control for data transfer between heterogeneous data stores | |
US8949188B2 (en) | Efficient backup and restore of a cluster aware virtual input/output server (VIOS) within a VIOS cluster | |
US8533164B2 (en) | Method and tool to overcome VIOS configuration validation and restoration failure due to DRC name mismatch | |
US12111794B2 (en) | Replication barriers for dependent data transfers between data stores | |
US11409711B2 (en) | Barriers for dependent operations among sharded data stores | |
US11567899B2 (en) | Managing dependent delete operations among data stores | |
CN102937964B (zh) | 基于分布式系统的智能数据服务方法 | |
CN111274223A (zh) | 一种一键部署大数据和深度学习容器云平台及其构建方法 | |
WO2021112909A1 (en) | Managing replication state for deleted objects | |
WO2017181430A1 (zh) | 分布式系统的数据库复制方法及装置 | |
US11533391B2 (en) | State replication, allocation and failover in stream processing | |
US11500874B2 (en) | Systems and methods for linking metric data to resources | |
US11079960B2 (en) | Object storage system with priority meta object replication | |
US11093465B2 (en) | Object storage system with versioned meta objects | |
CN114925075B (zh) | 一种多源时空监测信息实时动态融合方法 | |
US20230113180A1 (en) | Methods and systems for expanding gpu memory footprint based on hybrid-memory | |
US11074002B2 (en) | Object storage system with meta object replication | |
US11853177B2 (en) | Global entity distribution | |
CN117149865A (zh) | 数据处理方法、处理装置及处理系统 | |
Tandel | A study of modern cluster-based high availability database solutions | |
WO2024123539A2 (en) | Parameter-based versioning for log-based block devices | |
CN117149910A (zh) | 一种数据同步方法、装置、设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |