一种分布式数据的获取方法及系统与流程

文档序号:14011986阅读:152来源:国知局

本发明涉及数据采集领域,尤指一种分布式数据的获取方法及系统。



背景技术:

分布式数据有很多种类,其实kafka集群中的数据就是其中的一种。kafka全称是apachekafka,最初是由linkedin公司开发并开源的一种分布式消息系统,因为其分布式及高吞吐率而被广泛使用。它可以处理网站中所有的动作流数据,这种动作(例如搜索、浏览)是现代网络中的许多社会功能的关键因素。

kafka中涉及几个概念,生产者、消费者、broker、topic等。生产者即为生产数据的一方,英文为producer;消费者就是使用数据的一方,英文consumer;broker即为kafka集群的节点,每个kafka集群由多个broker组成,这些broker相互关联,共同对外提供服务;topic即为业务数据类型,比如路由器的心跳数据等。

当前分布式数据的获取方法一般是基于swoole来获取分布式数据;但是需要引入第三方插件swoole,使用比较麻烦,需要考虑兼容性问题,并且不方便对程序进行调试,也不方便完善错误程序。

目前使用php作为kafka消费者从kafka获取数据的方式都较为简单,采用的都是单一进程的方式,经常出现获取数据失败的情况,出现错误查找困难,获取数据的速度慢、获取的数据量小等问题。

因此,需要提供一种更为便捷、高效、数据获取成功率更高的分布式数据的获取方式。



技术实现要素:

本发明的目的是提供一种分布式数据的获取方法及系统,提高了系统的兼容性,使分布式数据获取更为便捷、高效,成功率更高。

本发明提供的技术方案如下:

本发明提供了一种分布式数据的获取方法,包括步骤:s10创建守护进程;s20所述守护进程监听是否有原始数据的信息推送;s30若未监听到有所述原始数据的信息推送,所述守护进程继续保持监听状态;s40若监听到有所述原始数据的信息推送,根据所述原始数据的主题类型创建多个子进程,所述守护进程将所述原始数据分配给相应的子进程;s50所述子进程从所述原始数据中获取分布式数据。

优选的,步骤s50之后包括:s60所述守护进程读取预先设定在配置文件中的重启时间;s61所述守护进程根据读取到的重启时间,对所述子进程进行定时;s62当所述子进程的运行时间达到所述重启时间时,所述守护进程重新启动所述子进程。

优选的,步骤s50之后还包括:s70所述守护进程记录所述守护进程和所述子进程的工作日志;s71所述守护进程根据预先获取的所述原始数据,以及所述工作日志,同步所述守护进程和所述子进程的工作数据。

优选的,步骤s10中创建所述守护进程具体包括:s101清除文件掩码;s102创建一个进程;s103对所述进程进行处理,使所述进程脱离终端控制,成为所述守护进程。

优选的,步骤s50具体包括:s501所述子进程根据所述原始数据的业务类型,创建任务线程;s502所述任务线程从所述原始数据中获取所述分布式数据。

本发明还提供了一种分布式数据的获取系统,包括:守护进程创建模块,用于创建守护进程;监听模块,所述进程创建模块电连接,用于通过守护进程监听是否有原始数据的信息推送;所述监听模块还用于若未监听到有所述原始数据的信息推送,通过所述守护进程继续保持监听状态;子进程创建模块,用于若监听到有所述原始数据的信息推送,根据所述原始数据的主题类型创建多个子进程;分配模块,与所述进程创建模块电连接,用于通过所述守护进程将所述原始数据分配给相应的子进程;数据获取模块,与所述监听模块、进程创建模块电连接,用于通过所述子进程从所述原始分布式数据中获取分布式数据。

优选的,还包括:读取模块,用于通过所述守护进程读取预先设定在配置文件中的重启时间;定时模块,与所述读取模块电连接,用于通过所述守护进程根据读取到的重启时间,对所述子进程进行定时;重启控制模块,与所述定时模块电连接,当所述子进程的运行时间达到所述重启时间时,通过所述守护进程重新启动所述子进程。

优选的,还包括:日志记录模块,用于通过所述守护进程记录所述守护进程和所述子进程的工作日志;数据同步模块,用于通过所述守护进程根据预先获取的所述原始数据,以及所述工作日志,同步所述守护进程和所述子进程的工作数据。

优选的,所述守护进程创建模块还包括:处理子模块,用于清除文件掩码;创建子模块,用于创建一个进程;所述处理子模块还用于对所述进程进行处理,使所述进程脱离终端控制,成为所述守护进程。

优选的,所述数据获取模块包括:线程创建子模块,所述子进程根据接收到的所述任务,创建任务线程;数据获取子模块,与所述线程创建子模块电连接,根据所述任务线程从所述原始数据中获取所述分布式数据。

通过本发明提供的一种分布式数据的获取方法及系统,能够带来以下至少一种有益效果:

1、通过直接用原生代码编写守护进程以及子进程来获取分布式数据信息,无需引入第三方插件,使得系统的兼容性更强。

2、使用原生代码编写各个进程,使得系统出现错误时,更容易查找错误,系统的调试也更加方便。

3、可以根据分布式数据的类型创建多个子进程,分配不同的数据获取任务给不同的子进程,采用多进程的方式,有效提高了数据获取的效率,以及数据获取的成功率。

4、定时重启子进程,避免子进程长时间运行而假死,提高了系统资源的利用率。

5、守护进程能够脱离终端的控制,不用第三方插件来启用守护进程,在终端开启之后会持续在后台运行,保持工作状态。

6、子进程根据原始数据不同的业务类型,创建不同的任务线程来获取分布式数据,使获取到的数据更为精确,获取数据的效率更高。

附图说明

下面将以明确易懂的方式,结合附图说明优选实施方式,对一种分布式数据的获取方法及系统的上述特性、技术特征、优点及其实现方式予以进一步说明。

图1是本发明一种分布式数据的获取方法的一个实施例的流程图;

图2是本发明一种分布式数据的获取方法的另一个实施例的流程图;

图3是本发明一种分布式数据的获取方法的另一个实施例的流程图;

图4是本发明一种分布式数据的获取系统的另一个实施例的结构示意图;

图5是本发明一种分布式数据的获取系统的另一个实施例的结构示意图。

附图标号说明:

1-守护进程创建模块、11-处理子模块、12-创建子模块、2-监听模块、3-子进程创建模块、4-分配模块、5-数据获取模块、51-线程创建子模块、52-数据获取子模块。

具体实施方式

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。

为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。

如图1所示,本发明一种分布式数据的获取方法的一个实施例,包括:

s10创建守护进程;

s20所述守护进程监听是否有原始数据的信息推送;

s30若未监听到有所述原始数据的信息推送,所述守护进程继续保持监听状态;

s40若监听到有所述原始数据的信息推送,根据所述原始数据创建子进程,所述守护进程根据所述原始数据的类型,将所述原始数据的获取任务分配给相应的子进程;

s50所述子进程从所述原始分布式数据中获取分布式数据。

在当前技术中,使用swoole来获取kafka数据需要引入第三方插件,使用比较麻烦,需要考虑兼容性问题,本实施例中可以使用php脚本语言来编写守护进程,守护进程能够脱离终端的控制,不用第三方插件来启用守护进程,在终端开启之后会持续在后台运行,保持工作状态,同时使用php脚本语言在系统中的兼容性比较强,不容易出现错误。

php全称是php:hypertextpreprocessor,是一种通用的脚本语言,php的底层使用c语言进行编写,特点是与所有的脚本语言一样,容易学习,使用广泛,主要应用在web开发领域。php可以快速的执行动态网页,在开发的阶段不需要考虑变量的类型给开发人员带来的极大的编写便利,最新的php也引入许多新的概念,例如jit(即时编译)、强制类型约束、匿名类等,更加完善和提高了php的运行速度。

本实施例提供的分布式数据获取方法主要运用于kafka分布式消息系统中。具体的,通过php脚本语言创建守护进程,即运行主进程,守护进程会持续监听kafka集群内的分布式数据的信息推送,若监听到有原始数据的信息推送,守护进程会预先识别监听到的原始数据的主题类型,即kafka集群中数据的topic(例如路由器的通信数据、天猫商品的购买数据等等),可以根据此类型通过php脚本语言创建子进程,然后将此次分布式数据的获取任务分配给相应的子进程,具体的分布式数据的获取由子进程来进行。由于原始数据是未经处理的数据,不具有分析价值,子进程获取数据时,会对所述原始数据进行统计、分析、归类等处理,得到分布式数据,所述的分布式数据包括由子进程对原始数据经过统计、分析、归类等处理得到的数据。

由于kafka集群中的分布式数据有多种类型,因此需要创建不同的子进程,每一种子进程负责统计相应数据类型的分布式数据,可以看做是以多线程的方式来统计分布式数据,因此,可以大大提升分布式数据获取的速度。同时,由于上述守护进程和所述子进程都是用php脚本语言来编写,因此在系统中运行的兼容性比较强,在系统运行出现错误时,能够及时通过系统运行日志查找错误,在系统运行前也方便系统的调试。

如图2所示,本发明提供了一种分布式数据的获取方法的另一个实施例,包括:

s10创建守护进程;

s20所述守护进程监听是否有原始数据的信息推送;

s30若未监听到有所述原始数据的信息推送,所述守护进程继续保持监听状态;

s40若监听到有所述原始数据的信息推送,根据所述原始数据创建子进程,所述守护进程根据所述原始数据的类型,将所述原始数据的获取任务分配给相应的子进程;

s50所述子进程从所述原始分布式数据中获取分布式数据;

s60所述守护进程读取预先设定在配置文件中的重启时间;

s61所述守护进程根据读取到的重启时间,对所述子进程进行定时;

s62当所述子进程的运行时间达到所述重启时间时,所述守护进程重新启动所述子进程;

s70所述守护进程记录所述守护进程和所述子进程的工作日志;

s71所述守护进程根据预先获取的所述原始数据,以及所述工作日志,同步所述守护进程和所述子进程的工作数据。

子程序在运行过程中由于长期运行会成为僵尸进程,即子进程假死,因此需要定时重启,防止子进程变成僵尸进程。具体的,可以先在配置文件中预先设定重启时间,守护进程在系统工作时,在配置文件中读取出所述的配置时间,然后对子进程进行定时,当子进程的运行时间达到重启时间时,重新启动子进程。

在获取kafka集群的分布式数据时,守护进程还需要记录系统运行的工作日志,以便在系统出现错误时,方便工作人员查找日志;由于本发明中的守护进程以及子进程都是用php脚本语言编写而成,在日志查找错误比较方便。除此以外,守护进程还需进行同步数据等任务,比如系统网络发生故障了,守护进程会记录下网络故障时任务的进程,当恢复网络后,守护进程会同步任务进程,继续完成剩余任务。

如图3所示,本发明提供了一种分布式数据的获取方法的一个实施例,包括:

s101清除文件掩码;

s102创建一个进程;

s103对所述进程进行处理,使所述进程脱离终端控制,成为所述守护进程;

s20所述守护进程监听是否有原始数据的信息推送;

s501所述子进程根据接收到的所述任务,创建任务线程;

s502所述子进程根据所述任务线程从所述原始数据中获取所述分布式数据;

s40若监听到有所述原始数据的信息推送,根据所述原始数据创建子进程,所述守护进程根据所述原始数据的类型,将所述原始数据的获取任务分配给相应的子进程;

s50所述子进程从所述原始分布式数据中获取分布式数据;

s60所述守护进程读取预先设定在配置文件中的重启时间;

s61所述守护进程根据读取到的重启时间,对所述子进程进行定时;

s62当所述子进程的运行时间达到所述重启时间时,所述守护进程重新启动所述子进程;

s70所述守护进程记录所述守护进程和所述子进程的工作日志;

s71所述守护进程根据预先获取的所述原始数据,以及所述工作日志,同步所述守护进程和所述子进程的工作数据。

具体的,本实施例中,具体阐述了守护进程的创建过程以及子进程的具体获取工作。由于守护进程会根据原始数据的主题类型分配相应的任务给不同的子进程,比如将路由器的通信数据的收集任务分配给子进程a,子进程a在接收到任务之后,根据原始数据的业务类型会生成不同的任务线程,由于路由器的通信数据包括很多种类,比如路由器的心跳数据、路由器的流量数据等等,根据不同的任务创建不同的任务线程来获取所述分布式数据。

守护进程的创建过程代码具体如下:

如图4所示,本发明提供了一种分布式数据的获取系统的另一个实施例,包括;

守护进程创建模块,用于创建守护进程;

监听模块,所述进程创建模块电连接,用于通过守护进程监听是否有原始数据的信息推送;

所述监听模块还用于若未监听到有所述原始数据的信息推送,通过所述守护进程继续保持监听状态;

子进程创建模块,用于若监听到有所述原始数据的信息推送,根据所述原始数据创建子进程;

分配模块,与所述进程创建模块电连接,用于通过所述守护进程根据所述原始数据的类型,将所述原始数据的获取任务分配给相应的子进程;

数据获取模块,与所述监听模块、进程创建模块电连接,用于通过所述子进程从所述原始分布式数据中获取分布式数据。

本实施例提供的分布式数据获取方法主要运用于kafka分布式消息系统中。具体的,可以通过php脚本语言创建守护进程,即运行主进程,守护进程会持续监听kafka集群内的分布式数据的信息推送,若监听到有分布式数据的信息推送,守护进程会预先识别监听到的分布式数据的类型,可以根据此类型通过php脚本语言创建子进程,然后将此次分布式数据的获取任务分配给相应的子进程,具体的分布式数据的获取由子进程来进行。

由于kafka集群中的分布式数据有多种类型,因此需要创建不同的子进程,每一种子进程负责统计相应数据类型的分布式数据,可以看做是以多线程的方式来统计分布式数据,因此,可以大大提升分布式数据获取的速度。同时,由于上述守护进程和所述子进程都是用php脚本语言来编写,因此在系统中运行的兼容性比较强,在系统运行出现错误时,能够及时通过系统运行日志查找错误,在系统运行前也方便系统的调试。

如图5所示,本发明提供了一种分布式数据的获取系统的另一个实施例,包括;

守护进程创建模块,用于创建守护进程;

监听模块,所述进程创建模块电连接,用于通过守护进程监听是否有原始数据的信息推送;

所述监听模块还用于若未监听到有所述原始数据的信息推送,通过所述守护进程继续保持监听状态;

子进程创建模块,用于若监听到有所述原始数据的信息推送,根据所述原始数据创建子进程;

分配模块,与所述进程创建模块电连接,用于通过所述守护进程根据所述原始数据的类型,将所述原始数据的获取任务分配给相应的子进程;

数据获取模块,与所述监听模块、进程创建模块电连接,用于通过所述子进程从所述原始分布式数据中获取分布式数据;

读取模块,用于通过所述守护进程读取预先设定在配置文件中的重启时间;

定时模块,与所述读取模块电连接,用于通过所述守护进程根据读取到的重启时间,对所述子进程进行定时;

重启控制模块,与所述定时模块电连接,当所述子进程的运行时间达到所述重启时间时,通过所述守护进程重新启动所述子进程;

日志记录模块,用于通过所述守护进程记录所述守护进程和所述子进程的工作日志;

数据同步模块,用于通过所述守护进程根据预先获取的所述原始数据,以及所述工作日志,同步所述守护进程和所述子进程的工作数据;

所述守护进程创建模块还包括:

处理子模块,用于清除文件掩码;

创建子模块,用于创建一个进程;

所述处理子模块还用于对所述进程进行处理,使所述进程脱离终端控制,成为所述守护进程;

线程创建子模块,所述子进程根据接收到的所述任务,创建任务线程;

数据获取子模块,与所述线程创建子模块电连接,根据所述任务线程从所述原始数据中获取所述分布式数据。

具体的,子程序在运行过程中由于长期运行会成为僵尸进程,即子进程假死,因此需要定时重启,防止子进程变成僵尸进程。具体的,可以先在配置文件中预先设定重启时间,守护进程在系统工作时,在配置文件中读取出所述的配置时间,然后对子进程进行定时,当子进程的运行时间达到重启时间时,重新启动子进程。

在获取kafka集群的分布式数据时,守护进程还需要记录系统运行的工作日志,以便在系统出现错误时,方便工作人员查找日志;由于本发明中的守护进程以及子进程都是用php脚本语言编写而成,在日志查找错误比较方便。除此以外,守护进程还需进行同步数据等任务,比如系统网络发生故障了,守护进程会记录下网络故障时任务的进程,当恢复网络后,守护进程会同步任务进程,继续完成剩余任务。

由于守护进程会根据分布式数据的类型分配相应的任务给不同的子进程,每个子进程在接收到任务之后,会生成相应的任务进程用来获取所述分布式数据。

守护进程的创建过程代码具体如下:

应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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