发明内容
本发明要解决的技术问题是针对现在的datax工具不支持分布式架构的问题,提供一种基于分布式集群datax的任务处理方法及系统。
本发明采用的技术方案是,所述基于分布式集群datax的任务处理方法,包括:获取需要执行的任务;获取当前所有datax节点的任务负载情况,其中,每个所述datax节点均配置有对应的代理服务模块,所述datax节点通过对应的所述代理服务模块在nacos注册中心注册;基于预先配置的分配策略,将所述任务下发至所述datax节点。
在一个实施方式中,所述获取当前所有datax节点的任务负载情况,包括:redis模块获取并以key-value的形式保存当前所有datax的任务负载情况,其中,所述任务负载情况包括被分配的同步任务数量。
在一个实施方式中,所述基于预先配置的分配策略,将所述任务下发至所述datax节点,包括:基于所述任务预先配置的优先级顺序,将所述任务下发至所述datax节点中,所述任务情况负载最低的至少一个所述datax节点中的其中一个所述datax节点。
在一个实施方式中,所述基于分布式集群datax的任务处理方法还包括:对所述datax节点的任务内存进行动态调整,包括:利用所述nacos注册中心的元数据,配置所述datax节点的任务内存;或者在将所述任务下发至所述datax节点前,配置所述任务的任务内存。
本发明的另一方面还提供了一种基于分布式集群datax的任务处理系统,包括:获取模块,获取需要执行的任务;redis管理模块,获取当前所有datax节点的任务负载情况,基于预先配置的分配策略,将所述任务下发至所述datax节点;nacos注册中心模块,每个所述datax节点均配置有对应的代理服务模块,所述datax节点通过对应的所述代理服务模块在所述nacos注册中心注册。
在一个实施方式中,所述redis模块被进一步配置为:获取并以key-value的形式保存当前所有datax的任务负载情况,其中,所述任务负载情况包括被分配的同步任务数量。
在一个实施方式中,所述redis模块被进一步配置为:基于所述任务预先配置的优先级顺序,将所述任务下发至所述datax节点中,所述任务情况负载最低的至少一个所述datax节点中的其中一个所述datax节点。
在一个实施方式中,所述基于分布式集群datax的任务处理系统还包括:内存调整模块,被配置为:利用所述nacos注册中心的元数据,配置所述datax节点的任务内存;或者在将所述任务下发至所述datax节点前,配置所述任务的任务内存。
本发明的另一方面还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上任一项所述的基于分布式集群datax的任务处理方法的步骤。
本发明的另一方面还提供了一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的基于分布式集群datax的任务处理方法的步骤。
采用上述技术方案,本发明至少具有下列优点:
本发明所述的基于分布式集群datax的任务处理方法,通过对每个datax节点配置对应的代理服务模块,并通过该模块使得多个datax节点在nacos注册中心注册,以实现datax的分布式集群,并且能够在nacos注册中心实现自动注册以及服务发现。
具体实施方式
为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。
本发明中说明书中对方法流程的描述及本发明说明书附图中流程图的步骤并非必须按步骤标号严格执行,方法步骤是可以改变执行顺序的。而且,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本发明第一实施例,一种基于分布式集群datax的任务处理方法,如图1所示,包括以下具体步骤:
步骤S1,获取需要执行的任务。
步骤S2,获取当前所有datax节点的任务负载情况,其中,每个datax节点均配置有对应的代理服务模块,datax节点通过对应的代理服务模块在nacos注册中心注册。
步骤S3,基于预先配置的分配策略,将任务下发至datax节点。
下面将分步详细说明本实施例所提供的一种基于分布式集群datax的任务处理方法。
步骤S1,获取需要执行的任务。
本实施例中,可以通过redis(Remote Dictionary Server,即远程字典服务)管理模块实现对任务的获取,也可以通过其他接口来实现对任务的获取,其中,任务可以是多个同步任务。
步骤S2,获取当前所有datax节点的任务负载情况,其中,每个datax节点均配置有对应的代理服务模块,datax节点通过对应的代理服务模块在nacos注册中心注册。
本实例中,参考图2,可以设置至少两个(一般情况下为多个)datax节点,由于开源版datax只支持单机模式,因此,为了使其构成分布式架构,在每个datax节点中,均配置了与之相对应的代理服务模块(图2中的agent),即每个代理服务模块对应着一个datax节点,通过agent服务来实现对datax的代理,在agent中提供了外部接口来执行相关对datax的操作,包括datax进程的启动和停止;另外datax的运行日志也通过agent来收集并发送到分布式存储中进行统一管理。
本实施例中,datax中的程序包通过容器的目录挂载,会被存放在agent微服务的容器的指定位置,因此datax节点的注册和发现是通过agent微服务的自动注册和发现来实现的,利用nacos作为注册中心,当一个新的代理服务模块注册到nacos注册中心后,那么该新加入的代理服务模块对应的datax节点就是可用状态,外部通过代理服务模块提供的外部接口就可以操作对应的datax程序。
本实施例中,还可以根据实际应用的需要,对当前的分布式架构进行扩容或者缩容。
具体地,当需要扩容时,需要将新datax节点对应的代理服务模块启动,让新的代理服务注册到nacos注册中心上,这时新的datax节点便加入到了datax集群中,就可以分配相应的任务运行。
当需要缩容时,只需要通过将datax节点对应的代理服务下线,这时该datax节点便脱离了datax集群的管理,也就不再接受任务的下发了。
步骤S3,基于预先配置的分配策略,将任务下发至datax节点。
本实施例中,datax节点的负载控制,是根据当前datax各节点的任务负载情况,来决定新的同步任务会分配到哪个datax节点。由于任务下发模块是采用的微服务架构,因此负载控制需要有一个统一的管理者,例如,可以采用redis的分布式锁,在分布式锁中进行统一的节点负载计算和节点负载更新。
进一步地,各个datax节点的负载情况也以key-value的形式保存在了redis中,当datax节点分配了新的同步任务,则该节点对应的负载加1,当任务执行结束,该节点对应的负载减1。也就是说,各个datax节点的任务负载情况,是由该datax当前处理的同步任务的数量确定的。
进一步地,在redis模块进行任务分配时,还设计了任务优先级策略,优先级别高的任务会优先分配运行资源。具体地,可以根据实际需要将任务区分为多个优先级,以优先级由高至低的顺序,依次将任务逐个下发至当前任务负载情况较轻,也就是同步任务数量最少的至少一个datax节点中的其中一个datax节点中。
本实施例中的一些可能的实施方式中,为了提高任务同步的性能,除了使用datax节点本身的任务分片之外,还可以通过datax节点分片方式,充分利用datax分布式集群的优势,将任务拆分之后分配到多个datax节点上并行运行。也就是说,可以将同一任务进行分片处理,分为多个部分下发至不同的datax节点中进行处理。
具体地,可以根据任务脚本中指定的splitPK字段,该字段可以是数值型或者时间类型,依据当前可分配资源的节点数量,利用该字段的值将源端数据进行切分,最终任务会切分为几个小任务进行执行。
本实施例中,由于不同类型的同步任务在任务运行过程中对内存的要求不同,因此datax节点任务运行内存的动态调整也显得十分重要。为了能够做到datax节点内存的精准控制,还可以通过以下两种方式,控制datax节点运行内存:
1)全局调整;
该方法是基于nacos的元数据,通过改变nacos中的元数据配置来设置datax的运行内存,该配置会通过agent服务传递到datax节点的启动脚本中,这种方法的优点是调整配置后,不需要重启agent服务,可以实时生效,并且是作用到所有的datax节点。
2)任务级别控制;
对于服务器资源紧张的情况下,可能并不想实现全局的内存控制,而是只想对某一个同步任务进行内存的调整,这时候可以采用此调整方法,该方法是在数据同步任务配置时,用户可以设置该任务运行时的内存参数,该参数会被传递给agent作为启动datax时的配置,这种方案的优点是只会对该任务生效,不影响其他任务的内存设置。
本实施例相较于现有技术,至少具备以下优点;
1)通过设计的agent代理服务,来实现对datax的代理,通过agent服务的集群部署来实现datax的分布式集群。
2)节点自动注册和服务发现:将datax软件包作为agent服务的一部分,利用agent服务向nacos注册中心注册的特性,来实现agent服务和datax节点的自动注册和服务的发现。
3)节点的动态伸缩:结合agent微服务的服务注册和服务下线功能来实现datax集群的扩容和缩容,从而实现datax节点的动态伸缩。
4)redis负载控制及任务分配:利用redis分布式锁的特性来构建统一的负载管理,利用redis存储各个节点的负载情况,并利用任务优先级策略来控制任务运行的优先程度。
5)节点内存的动态调整:通过全局调整和任务级别控制,来实现对datax运行时内存的动态调整。
6)任务分片:依托datax集群特性,使用splitPK字段对源端数据切分,根据切分结果将大任务拆分为多个小任务,分配到datax集群中运行,提高任务并行度。
本发明第二实施例,与第一实施例对应,本实施例介绍一种基于分布式集群datax的任务处理系统,如图3所示,包括以下组成部分:
获取模块,被配置为获取需要执行的任务。
redis管理模块,获取当前所有datax节点的任务负载情况,基于预先配置的分配策略,将任务下发至所述datax节点。
nacos注册中心模块,每个datax节点均配置有对应的代理服务模块,datax节点通过对应的代理服务模块在nacos注册中心注册。
本实施例中,redis模块被进一步配置为:获取并以key-value的形式保存当前所有datax的任务负载情况,其中,任务负载情况包括被分配的同步任务数量。
本实施例中,redis模块被进一步配置为:基于任务预先配置的优先级顺序,将所述任务下发至datax节点中,任务情况负载最低的至少一个datax节点中的其中一个datax节点。
本实施例中,基于分布式集群datax的任务处理系统还包括:内存调整模块,被配置为:利用nacos注册中心的元数据,配置datax节点的任务内存;或者在将任务下发至所述datax节点前,配置任务的任务内存。
本发明第三实施例,一种电子设备,如图4所示,可以作为实体装置来理解,包括处理器以及存储有所述处理器可执行指令的存储器,当所述指令被处理器执行时,执行如下操作:
步骤S1,获取需要执行的任务。
步骤S2,获取当前所有datax节点的任务负载情况,其中,每个datax节点均配置有对应的代理服务模块,datax节点通过对应的代理服务模块在nacos注册中心注册。
步骤S3,基于预先配置的分配策略,将任务下发至datax节点。
本发明第四实施例,本实施例的一种基于分布式集群datax的任务处理方法的流程与第一、二或三实施例相同,区别在于,在工程实现上,本实施例可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的所述方法可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台设备(可以是基站等网络设备)执行本发明实施例所述的方法。
综上所述,相较于现有技术,本发明的优点至少包括:
1)通过设计的agent代理服务,来实现对datax的代理,通过agent服务的集群部署来实现datax的分布式集群。
2)节点自动注册和服务发现:将datax软件包作为agent服务的一部分,利用agent服务向nacos注册中心注册的特性,来实现agent服务和datax节点的自动注册和服务的发现。
3)节点的动态伸缩:结合agent微服务的服务注册和服务下线功能来实现datax集群的扩容和缩容,从而实现datax节点的动态伸缩。
4)redis负载控制及任务分配:利用redis分布式锁的特性来构建统一的负载管理,利用redis存储各个节点的负载情况,并利用任务优先级策略来控制任务运行的优先程度。
5)节点内存的动态调整:通过全局调整和任务级别控制,来实现对datax运行时内存的动态调整。
6)任务分片:依托datax集群特性,使用splitPK字段对源端数据切分,根据切分结果将大任务拆分为多个小任务,分配到datax集群中运行,提高任务并行度。
通过具体实施方式的说明,应当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图示仅是提供参考与说明之用,并非用来对本发明加以限制。