一种数据同步方法、装置、系统及存储介质与流程

文档序号:25168371发布日期:2021-05-25 14:36阅读:78来源:国知局
一种数据同步方法、装置、系统及存储介质与流程

本公开涉及信息处理技术领域,特别是涉及一种数据同步方法、装置、系统及存储介质。



背景技术:

kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据,是在现代网络上的许多社会功能的一个关键因素。

在实际应用中,当一个消息系统kafka集群将topic数据镜像到另外一个kafka集群时,需要借助kafka集群中的mirromaker的工具实现,由于mirromaker工具不是集群化的服务,因此上述工具无法解决大量数据镜像任务的场景。

为了实现大量数据镜像任务,通常采用ureplicator集群实现,具体的,

在ureplicator集群中的worker启动之前,预先在配置文件中写入一个源kafka集群地址和一个目的kafka集群地址,并且一个ureplicator集群配置文件中只会配置一个源kafka集群地址和一个目的集群地址,因此当该集群启动后,只能执行从固定源kafka集群到固定目的kafka集群的数据同步任务,由于在配置文件中不存在其他源kafka集群地址和目的kafka集群地址,因此不能连接到配置文件中不存在的源kafka集群地址和目的kafka集群地址,当然也就无法执行对应的数据镜像任务,也就是说,对于配置文件中不存在的源kafka集群地址和目的kafka集群地址的数据镜像任务,由于不知道集群地址,因此无法连接源集群进行消费,以及无法连接目的集群进行写入。

此外,由于数据同步任务的源集群和目的集群是固定不变的:当搭建一个ureplicator集群后,那么该同步服务集群就只能负责从一个kafka源集群镜像到另外一个kafka目的集群,无法进行大量数据同步,如果此时存在另外的源集群和目的集群的数据同步任务,那么需要重新搭建一个ureplicator集群。



技术实现要素:

本公开提供了一种数据同步方法、装置、系统及存储介质,以至少解决目前ureplicator集群无法实现大量数据同步的问题。

为了解决上述问题,本公开公开了一种数据同步方法,应用于同步服务器,所述方法包括:

读取分布式应用程序协调系统中的多个同步任务,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址;

当存在多个所述同步任务的任务分配对象为所述同步服务器时,针对每个所述同步任务建立多组消费者线程和生产者线程;

根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取;

根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入。

进一步的,在所述根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取之后,还包括;

将读取的同步数据放入同步队列中;

根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入,包括:

读取所述同步队列中的同步数据,根据所述同步数据对应的生产者线程,连接目的同步对象进行同步数据的写入。

进一步的,所述同步任务中还包括所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题;

所述根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取,包括:

根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象,读取所述源主题下的所述同步数据;

所述根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入,包括:

根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象,将所述同步数据写入所述目的主题。

进一步的,所述根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入,包括:

当所述同步数据的目的地址为分布式文件系统hdfs地址时,调用分布式文件系统接口,启动对应的生产者线程,通过所述分布式文件系统接口连接目的同步对象进行同步数据的写入。

为了解决上述问题,本公开还公开了一种数据同步方法,应用于控制服务器,所述方法包括:

接收数据同步请求,所述数据同步请求包括:同步数据的源地址和目的地址;

根据所述同步请求对同步服务器进行任务分配,生成同步任务;

将所述同步任务写入到分布式应用程序协调系统,以使所述同步服务器根据所述分布式应用程序协调系统中的同步任务进行数据同步,其中,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址。

进一步的,所述根据所述同步请求对同步服务器进行任务分配,生成同步任务,包括;

获取各所述同步服务器当前正在执行的同步任务;

根据所述同步请求,选择同步任务数量小于设定阈值的同步服务器进行任务分配,生成同步任务。

进一步的,所述同步请求中还包括:所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题;

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的源地址及目的地址,以及所述源地址中的源主题,所述目的地址中的目的主题。

进一步的,所述同步请求中包含的源地址为消息系统集群地址,所述同步请求还包括所述同步数据对应的所述源地址中的源主题;

所述同步请求中包含的所述目的地址为分布式文件系统hdfs地址,所述同步请求中还包含所述hdfs地址对应的hdfs目录;

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的所述消息系统集群地址及hdfs地址,以及所述源主题,所述hdfs目录。

为了解决上述问题,本公开还公开了一种数据同步装置,应用于同步服务器,包括:

读取模块,被配置为读取分布式应用程序协调系统中的多个同步任务,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址;

线程模块,被配置为当存在多个所述同步任务的任务分配对象为所述同步服务器时,针对每个所述同步任务建立多组消费者线程和生产者线程;

消费模块,被配置为根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取;

生产模块,被配置为根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入。

进一步的,在所述消费模块根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取之后,所述数据同步装置还包括;

同步队列模块,被配置为将读取的同步数据放入同步队列中;

所述生产模块,包括:

第一写入模块,被配置为读取所述同步队列中的同步数据,根据所述同步数据对应的生产者线程,连接目的同步对象进行同步数据的写入。

进一步的,所述同步任务中还包括所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题;

所述消费模块,包括:

第一连接模块,被配置为根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象,读取所述源主题下的所述同步数据;

所述生产模块,包括:

第二写入模块,被配置为根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象,将所述同步数据写入所述目的主题。

进一步的,所述生成模块,包括:

第三写入模块,被配置为当所述同步数据的目的地址为分布式文件系统hdfs地址时,调用分布式文件系统接口,启动对应的生产者线程,通过所述分布式文件系统接口连接目的同步对象进行同步数据的写入。

为了解决上述问题,本公开还公开了一种数据同步装置,应用于控制服务器,包括:

接收模块,被配置为接收数据同步请求,所述同步请求包括:同步数据的源地址和目的地址;

分配模块,被配置为根据所述数据同步请求对同步服务器进行任务分配,生成同步任务;

数据同步模块,被配置为将所述同步任务写入到分布式应用程序协调系统,以使所述同步服务器根据所述分布式应用程序协调系统中的同步任务进行数据同步,其中,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址。

进一步的,所述分配模块包括:

获取子模块,被配置为获取各所述同步服务器当前正在执行的同步任务;

生成同步任务子模块,被配置为根据所述同步请求,选择同步任务数量小于设定阈值的同步服务器进行任务分配,生成同步任务。

进一步的,所述同步请求中还包括:所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题;

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的源地址及目的地址,以及所述源地址中的源主题,所述目的地址中的目的主题。

进一步的,所述同步请求中包含的源地址为消息系统集群地址,所述同步请求还包括所述同步数据对应的所述源地址中的源主题;

所述同步请求中包含的所述目的地址为分布式文件系统hdfs地址,所述同步请求中还包含所述hdfs地址对应的hdfs目录;

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的所述消息系统集群地址及hdfs地址,以及所述源主题,所述hdfs目录。

为了解决上述问题,本公开还公开了一种数据同步系统,包括:

控制服务器,被配置为接收数据同步请求,所述数据同步请求包括:同步数据的源地址和目的地址;根据所述同步请求对同步服务器进行任务分配,生成同步任务;将所述同步任务写入到分布式应用程序协调系统;

分布式应用程序协调系统,被配置为记录所述控制服务器分配的同步任务;

多个同步服务器,所述同步服务器,被配置为读取分布式应用程序协调系统中的多个同步任务,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址;当存在多个所述同步任务的任务分配对象为所述同步服务器时,针对每个所述同步任务建立多组消费者线程和生产者线程;根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取;根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入。

为了解决上述问题,本公开还公开了一种存储介质,当所述存储介质用于存储程序代码,所述程序代码以实现所述数据同步方法所执行的操作。

为了解决上述问题,本公开还公开了一种存储介质,当所述存储介质用于存储程序代码,所述程序代码以实现所述数据同步方法所执行的操作。

与现有技术相比,本公开包括以下优点:

本公开同步服务器读取到分布式应用程序协调系统的同步任务,才会启动多个消费线程和多个生成者线程实现将源地址的数据同步到目的地址。相对于ureplicator方案来说,本公开的同步服务器启动多个消费者线程和多个生产者线程来进行读写,这样并发度更高,可以实现大量数据的同步,大大提高了cpu的利用率。

当然,实施本公开的任一产品不一定需要同时达到以上所述的所有优点。

附图说明

图1是根据一示例性实施例示出的一种数据同步方法的流程图;

图2是根据一示例性实施例示出的worker接口设计的示意图;

图3是根据一示例性实施例示出的源kafka集群到目的kafka集群数据同步的结构示意图;

图4是根据一示例性实施例示出的源kafka集群到分布式文件系统hdfs数据同步的结构示意图;

图5是根据一示例性实施例示出的一种数据同步方法的流程图;

图6是根据一示例性实施例示出的一种数据同步装置的框图;

图7是根据一示例性实施例示出的一种数据同步装置的框图;

图8是根据一示例性实施例示出的一种数据同步系统的框图。

具体实施方式

为使本公开的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本公开作进一步详细的说明。

图1是根据一示例性实施例示出的一种数据同步方法的流程图,如图1所示,该数据同步方法应用于同步服务器,包括:

在本公开实施例中,同步服务器作为数据同步的执行者,主要是实现将源地址的数据写入到目的地址。具体的,同步服务器读取到分布式应用程序协调系统的同步任务,才会启动多个消费线程和多个生成者线程实现将源地址的数据同步到目的地址。相对于ureplicator方案来说,本公开的同步服务器启动多个消费者线程和多个生产者线程来进行读写,这样并发度更高,可以实现大量数据的同步,因此相对于ureplicator方案来说,本公开实施例中的数据同步采用多个消费线程和多个生成者线程,大大提高了cpu的利用率。

同步服务器可以为多种类型,例如:服务器或者工作站worker或者分布式服务器等等。

本公开实施例的所述数据同步方法具体包括:

步骤101:读取分布式应用程序协调系统zookeeper中的多个同步任务。

其中,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址。

步骤102:当存在多个所述同步任务的任务分配对象为所述同步服务器时,针对每个所述同步任务建立多组消费者线程和生产者线程。

步骤103:根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取。

步骤104:根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入。

在本公开实施例中,同步服务器读取分布式应用程序协调系统中的多个同步任务时,同步服务器针对每个同步任务启动多个消费者consumer线程从源地址读取同步数据,以及启动多个生产者producer线程将读取的同步数据写入到目的地址信息,而相关技术中均是同步服务器启动之前,将一个源集群信息和一个目的集群信息写入配置文件中,这样以便集群启动时进行加载源集群信息和目的集群信息,从而使同步服务器只能实现配置文件中记载的源集群和目的集群之间数据同步。

进一步的,本公开实施例中,在所述根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取之后,还包括;

将读取的同步数据放入同步队列中。

在将同步数据放入同步队列后,步骤104包括如下子步骤:

子步骤104:读取所述同步队列中的同步数据,根据所述同步数据对应的生产者线程,连接目的同步对象进行同步数据的写入。

进一步的,本公开实施例中,所述同步任务中还包括所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题。

所述步骤103包括如下子步骤:

子步骤1031:根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象,读取所述源主题下的所述同步数据。

步骤104包括如下子步骤:

子步骤1042:根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象,将所述同步数据写入所述目的主题。

步骤104包括如下子步骤:

子步骤1043:当所述同步数据的目的地址为分布式文件系统hdfs地址时,调用分布式文件系统接口,启动对应的生产者线程,通过所述分布式文件系统接口连接目的同步对象进行同步数据的写入。

当所述同步数据的目的地址为消息系统集群地址时,调用消息系统集群接口,启动对应的生产者线程,通过所述消息系统集群接口连接目的同步对象进行同步数据的写入。

在本公开实施例中,同步服务器可以采用回调方法从分布式应用程序协调系统获取同步任务,并且针对每一对源地址和目的地址,都会启动一个或多个同步服务器workerthread线程,这些线程会负责处理源地址到目的地址的数据同步服务,并且workerthrea可以配置多个producer和多个consumer,具体的,worker接口设计示意图,如图2所示。

在图2中,同步服务器为worker为例,说明同步服务器的数据同步过程,具体的,worker负责两个集群对的数据同步,一个集群对为源kafka集群为a,目的kafka集群为b;另一个集群对为源kafka集群为c,目的kafka集群为d。

当worker读取到同步任务时,worker启动workerthread1-workerthreadn实现将源kafka集群a和目的kafka集群b的数据同步,以及将源kafka集群c和目的kafka集群d的数据同步。

具体的,workerthread1-workerthreadn将源kafka集群a的源主题的同步数据同步到目的kafka集群b的目的主题中。

workerthread1-workerthreadn将源kafka集群c的源主题的同步数据同步到目的kafka集群d的目的主题中。

在本公开实施例中,worker中主要的类和变量之间的关系如下:

mirrorworkermanage类持有一个workersmap类变量,workersmap类包含一个allworkersmap变量,allworkersmap是一个hashmap,key是源kafka集群名+目的集群信息,value是mirrormakerworker对象的list集合,mirrormakerworker的类负责相应源kafka集群到目的集群信息的数据同步任务。

图3是根据一示例性实施例示出的源kafka集群到目的kafka集群数据同步的结构示意图,具体数据同步的方法如下:

woker1-wokern读取分布式应用程序协调系统zookeeper的同步任务,当读取到所述woker对应的同步任务时,woker1与源kafka集群和目的源kafka集群建立连接。woker1启动多个消费者线程从所述源消息系统集群中读取同步数据放入同步队列中,woker1启动多个生产者线程读取所述同步队列中的同步数据,根据所述同步数据对应的生产者线程,连接目的kafka集群的目的主题进行同步数据的写入。

在本公开实施例中,所述woker1启动多个消费者线程通过kafka集群接口,从所述源kafka集群中读取源主题的同步数据,并将读取的同步数据放入同步队列中。

woker1启动多个生产者线程通过kafka集群接口,从所述队列中读取同步数据,并轮询写入到目的kafka集群的目的主题中。

图4是根据一示例性实施例示出的源kafka集群到分布式文件系统hdfs数据同步的结构示意图,具体数据同步的方法如下:

woker1-wokern读取分布式应用程序协调系统zookeeper的同步任务,当读取到所述woker对应的同步任务时,woker1与源kafka集群和hdfs建立连接。woker1启动多个消费者线程从所述源消息系统集群中读取同步数据放入同步队列中,所述woker1启动多个生产者线程从所述同步队列中读取所述同步数据,并轮询写入到所述分布式文件系统。

在本公开实施例中,所述woker1启动多个消费者线程通过kafka集群接口,从所述源kafka集群中读取源主题的同步数据,并将所述同步数据放入同步队列中。

在本公开实施例中,所述woker1启动多个生产者线程通过分布式文件系统接口从所述队列中读取所述同步任务,并轮询写入到所述分布式文件系统中的hdfs目录。

图5是根据一示例性实施例示出的一种数据同步方法的流程图,如图5所示,该数据同步方法应用于控制服务器中,包括以下步骤:

步骤501:接收数据同步请求。

其中,所述数据同步请求包括:同步数据的源地址和目的地址,该目的地址可以为一个或者两个以上。

源地址可以为不同的类型,例如:源地址为消息系统集群kafka地址,也可以为分布式文件系统hdfs地址,还可以为其他类型的地址。

目的地址也可以为不同的类型,例如:源地址为消息系统集群kafka地址,也可以为分布式文件系统hdfs地址,还可以为其他类型的地址。

在本公开实施例中,控制服务器可以接收不同服务器的数据同步请求,也可以通过客户端作为透传设备接收不同服务器的数据同步请求,也可以直接从客户端获取数据同步请求。

本公开实施例中,控制服务器作为管理者,主要负责根据数据同步请求对同步服务器分配或删除同步任务,或者增加或者删除同步服务器节点,以及感知同步服务器节点的工作状态,并重新为同步服务器分配相应的同步任务。

同步服务器可以是多个工作站worker,也可以为其他,例如:分布式服务器,对此本公开不做具体限制。

本公开实施例中,所述同步数据请求中还包括:所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题。

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的源地址及目的地址,以及所述源地址中的源主题,所述目的地址中的目的主题。

例如:同步数据的源地址为源消息系统kafka集群,源地址的源主题,目的地址为目的消息系统kafka集群,目的地址中的目的主题,这样控制服务器可以实现源kafka集群中的源主题与目的kafka集群中的目的主题之间的数据同步。

本公开实施例中,所述同步请求中包含的所述目的地址为分布式文件系统hdfs地址,所述同步请求中还包含所述hdfs地址对应的hdfs目录。

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的所述消息系统集群地址及hdfs地址,以及所述源主题,所述hdfs目录。

例如:源地址为源消息系统kafka集群,源地址的源主题,目的地址为分布式文件系统hdfs,目的地址对应的hdfs目录,这样控制服务器也可以实现源kafka集群中的源主题与目的分布式文件系统hdfs中的hdfs目录之间的数据同步。

步骤502:根据所述数据同步请求对同步服务器进行任务分配,生成同步任务。

作为其中一种实现方式,具体的,本步骤502还可以包括如下述子步骤子步骤5021:获取各所述同步服务器当前正在执行的同步任务。

控制服务器统计各个同步服务器当前正在执行的同步任务,即控制服务器统计各个同步服务器的同步任务数量。

子步骤5022:根据所述数据同步请求,选择同步任务数量小于设定阈值的同步服务器进行任务分配,生成同步任务。

控制服务器选择同步任务数量小于设定阈值的同步服务器可以为一个或多个同步服务器,然后对选择出的同步服务器进行任务分配,生成同步任务。

阈值的设定可以由本领域技术人员采用任意适当方式进行设定,如可以采用人工经验设定阈值,或者针对历史数据的差异值设定阈值,本公开对此不作限制。

示例中,数据同步请求中的源地址为源kafka集群cluster1的地址;目的地址为目的kafka集群cluster2的地址;源主题topic名称为topica,分区partition个数为3,分别为partition0、partition1、partition2;目的主题topic名称为topicb。

控制服务器收到同步任务请求后,将topica的3个partition分配给不同的同步服务器。

具体的,分配的依据是控制服务器统计同步服务器正在执行的partition数量,选出负责partition数量比较少的同步服务器来进行依次分配,选择出3个同步服务器,分别为同步服务器1、同步服务器2和同步服务器3。比如分配如下:partition0分配给同步服务器1,partition2分配给同步服务器2,partition2分配给同步服务器3。

需要说明的是,上述示例仅仅用作举例,实际应用中可以根据实际应用场景进行任务分配。

步骤503:将所述同步任务写入到分布式应用程序协调系统zookeeper,以使所述同步服务器根据所述分布式应用程序协调系统中的同步任务进行数据同步。

其中,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址。

在本步骤中,分布式应用程序协调系统zookeeper只记录信息,不对信息进行处理。

具体的,将每个所述同步任务中包含任务分配对象,同步数据的源地址及目的地址,以及所述源地址中的源主题,所述目的地址中的目的主题全部写入到分布式应用程序协调系统zookeeper。

例如:本公开实施例中的源地址为源消息系统kafka集群信息,目的地址为目的消息系统kafka集群信息,源地址中的源主题topic,目的地址中的目的主题topic。这样当控制服务器根据同步请求对同步服务器进行任务分配,生成同步任务,同步服务器可以实现将源kafka集群信息中的源主题写入到目的kafka集群的目的topic。

例如:本公开实施例中的源地址为源消息系统kafka集群信息,目的地址为分布式文件系统hdfs地址,源地址中的源主题topic,目的地址中的hdfs目录。这样当控制服务器根据同步请求对同步服务器进行任务分配,生成同步任务,同步服务器可以实现将源kafka集群信息中的源主题写入到目的hdfs的目的hdfs目录。

综上所述,首先,本公开实施例中在不同集群之间进行数据同步时,通过发送的数据同步请求传递源地址和目的目的地址,从而实现不同集群之间的数据同步。

其次,控制服务器接收数据同步请求,根据所述同步任务请求对同步服务器进行任务分配,生成同步任务;将所述同步任务写入到分布式应用程序协调系统,以使同步服务器根据所述分布式应用程序协调系统中的同步任务进行数据同步。由于同步任务请求中携带有同步数据的源地址和目的地址,因此在集群启动时,配置文件中不需要配置同步数据的源地址和目的地址,这样可以根据同步任务请求中携带的同步数据的源地址和目的地址即可实现不同集群之间的数据同步。

图6是根据一示例性实施例示出的一种数据同步装置的框图,该装置60可以应用于控制服务器,如图6所示,该装置60可以包括:

接收模块601,被配置为接收数据同步请求,所述同步请求包括:同步数据的源地址和目的地址。

分配模块602,被配置为根据所述数据同步请求对同步服务器进行任务分配,生成同步任务。

数据同步模块603,被配置为将所述同步任务写入到分布式应用程序协调系统,以使所述同步服务器根据所述分布式应用程序协调系统中的同步任务进行数据同步,其中,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址。

在一种可能实施方式中,所述分配模块包括:

获取子模块,被配置为获取各所述同步服务器当前正在执行的同步任务。

生成同步任务子模块,被配置为根据所述同步请求,选择同步任务数量小于设定阈值的同步服务器进行任务分配,生成同步任务。

在一种可能实施方式中,所述同步请求中还包括:所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题;

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的源地址及目的地址,以及所述源地址中的源主题,所述目的地址中的目的主题。

在一种可能实施方式中,所述同步请求中包含的源地址为消息系统集群地址,所述同步请求还包括所述同步数据对应的所述源地址中的源主题;

所述同步请求中包含的所述目的地址为分布式文件系统hdfs地址,所述同步请求中还包含所述hdfs地址对应的hdfs目录;

相应地,所述每个所述同步任务中包含任务分配对象,同步数据的所述消息系统集群地址及hdfs地址,以及所述源主题,所述hdfs目录。图7是根据一示例性实施例示出的一种数据同步装置的框图,该装置70可以应用于同步服务器,如图7所示,该装置70可以包括:

读取模块701,被配置为被配置为读取分布式应用程序协调系统中的多个同步任务,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址。

线程模块702,被配置为当存在多个所述同步任务的任务分配对象为所述同步服务器时,针对每个所述同步任务建立多组消费者线程和生产者线程。

消费模块703,被配置为根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取。

生产模块704,被配置为根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入。

在一种可能实施方式中,在所述消费模块根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取之后,所述数据同步装置还包括;

同步队列模块,被配置为将读取的同步数据放入同步队列中。

所述生产模块,包括:

第一写入模块,被配置为读取所述同步队列中的同步数据,根据所述同步数据对应的生产者线程,连接目的同步对象进行同步数据的写入。

在一种可能实施方式中,所述同步任务中还包括所述同步数据对应的所述源地址中的源主题,以及所述同步数据对应的所述目的地址中的目的主题;

所述消费模块,包括:

第一连接模块,被配置为根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象,读取所述源主题下的所述同步数据;

所述生产模块,包括:

第二写入模块,被配置为根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象,将所述同步数据写入所述目的主题。

在一种可能实施方式中,,所述生成模块,包括:

第三写入模块,被配置为当所述同步数据的目的地址为分布式文件系统hdfs地址时,调用分布式文件系统接口,启动对应的生产者线程,通过所述分布式文件系统接口连接目的同步对象进行同步数据的写入。

本公开实施例中,同步服务器读取zookeeper的同步任务,当读取到对应的同步任务时,才会启动多个消费线程和多个生成者线程实现将源地址到目的地址的数据同步。相对于ureplicator方案来说,本申请中同步服务器启动多个消费者线程和多个生产者线程来进行读写,这样并发度更高,可以实现大量数据的同步,因此大大提高了cpu的利用率。

图8是根据一示例性实施例示出的一种数据同步系统的框图,该系统可以包括:

本公开实施例中的数据同步系统是指kreplicator,该kreplicator系统具体包括:

控制服务器801,被配置为接收数据同步请求,所述数据同步请求包括:同步数据的源地址和目的地址;根据所述同步请求对同步服务器进行任务分配,生成同步任务;将所述同步任务写入到分布式应用程序协调系统。

分布式应用程序协调系统802,被配置为记录所述控制服务器分配的同步任务。

多个同步服务器803,所述同步服务器,被配置为读取分布式应用程序协调系统中的多个同步任务,每个所述同步任务包含任务分配对象,同步数据的源地址及目的地址;当存在多个所述同步任务的任务分配对象为所述同步服务器时,针对每个所述同步任务建立多组消费者线程和生产者线程;根据每个所述同步数据的源地址,启动对应的消费者线程连接源同步对象进行同步数据读取;根据每个所述同步数据的目的地址,启动对应的生产者线程连接目的同步对象进行同步数据的写入。

需要说明的,控制服务器和同步服务器包括前述实施例的内容,在此不再赘述。

本公开实施例中,kreplicator可以支持任意kafka集群之间的数据同步以及kafka集群与hdfs系统之间的数据同步,不用重新搭建集群,并且可以在不重启服务的情况下同步到不同topic中,减少了运维成本。

为了本领域技术人员更好的理解本申请限定的技术方案,下面通过实例详细说明本公开的数据同步的过程。

示例1,源地址为kafka集群地址,目的地址为kafka集群地址,当需要将源kafka集群cluster1中的topica同步到目的kafka集群cluster2中的topicb时,其中topica和topicb均有3个partition,两个kafka集群之间的数据同步过程如下:

控制服务器接收数据同步请求之后,发送同步任务请求,同步任务请求中包括:源kafka集群cluster1的地址、目的kafka集群cluster2的地址;源topica,分区partition个数为3,分别为partition0、partition1、partition2、目的topicb。

控制服务器收到任务请求后,进行任务分配,将topica的3个partition分配给不同的worker进行数据同步。

本步骤中,可以将partition0分配给worker1,partition1分配给wroker2,partition2分配给worker3。控制服务器将分布的同步任务写入到zookeeper相应目录上。

每个worker从zookeeper上读取到同步任务时,启动多个consumer连接源kafka集群进行消费源topica中对应的partiion数据,并放入同步队列中,然后再启多个producer线程连接目的kafka集群,将同步队列中的同步数据轮询写入目的topicb中的各个partiiton中。

示例2,源地址为kafka集群地址,目的地址为hdfs,当需要将源kafka集群cluster1中的topica同步到目的hdfs对应的hdfs目录,其中topica有3个partition,kafka集群与hdfs之间的数据同步过程如下:

控制服务器接收数据同步请求之后,发送同步任务请求,同步任务请求中包括:源kafka集群cluster1的地址、目的hdfs地址;源topica,分区partition个数为3,分别为partition0、partition1、partition2、目的hdfs目录。

控制服务器收到任务请求后,进行任务分配,将topica的3个partition分配给不同的worker进行数据同步。

本步骤中,可以将partition0分配给worker1,partition1分配给wroker2,partition2分配给worker3。控制服务器将分布的同步任务写入到zookeeper相应目录上。

每个worker从zookeeper上读取到同步任务时,启动多个consumer连接源kafka集群进行消费源topica中对应的partiion数据,并放入同步队列中,然后再启多个producer线程连接目的hdfs集群,将同步队列中的同步数据轮询写入目的hdfs对应的hdfs目录中。

在示例性实施例中,还提供了一种包括存储介质,当所述存储介质用于存储程序代码,所述程序代码以实现数据同步方法所执行的操作。可选地,存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本公开所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

本领域技术人员易于想到的是:上述各个实施例的任意组合应用都是可行的,故上述各个实施例之间的任意组合都是的实施方案,但是由于篇幅限制,本说明书在此就不一一详述了。以上所述,以上实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的精神和范围。

对本公开所提供的一种数据同步的方法、装置、系统及存储介质,进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1