实时处理引擎的故障恢复方法及相应的服务器与流程

文档序号:11154748阅读:475来源:国知局
实时处理引擎的故障恢复方法及相应的服务器与制造工艺
本申请涉及信息
技术领域
,尤其涉及一种实时处理引擎的自动故障恢复技术。
背景技术
:随着大数据技术的发展,企业能够存储和处理的比以往更大规模的数据量,达到TB甚至PB级别。目前企业在海量数据上实现主要是离线分析业务,这类业务从数据的产生到结果的生成往往需要T+1甚至更长的周期。对很多对实时性要求很高的行业来说,这是不能满足他们的业务要求的。如何更快地处理数据、更实时地反馈结果是大数据领域急需解决的问题。实时处理引擎的出现为满足企业实时地处理大数据的需求提供了可能,通过实时处理引擎,能够帮助企业进行ETL、实时报表分析、甚至实时机器学习等工作。目前市面上主流的几个分布式实时处理引擎包括:ApacheFlink,SparkStreaming等,用户通过这些引擎提供的API接口可以实现有实时性需求业务。实时处理和传统的批处理业务有很大的不同,其中最重要的一点是实时处理业务处理的是没有边界的数据,即数据时源源不断的,客户通常要求实时处理业务7×24不间断的运行。但是由于分布式系统都会因为种种如网络、硬件故障原因导致停止服务,在这种情况下需要能够及时发现,保证数据不发生丢失,最短的时间内进行故障恢复。目前如ApacheFlink以及SparkStreaming等这些主流实时处理引擎,虽然都有提供机制保证数据的可靠性,但是都没有提供一套完整的自动故障恢复服务。申请内容本申请的一个目的是提供一种实时处理引擎的自动故障恢复技术。为实现上述目的,本申请提供了一种实时处理引擎的故障恢复方法,该方法包括:在获取到同步锁时,成为主服务器;在执行实时处理应用时,记录关于当前执行的实时处理应用的应用信息,以使备服务器在成为主服务器时,通过获取所述应用信息继续执行对应的实时处理应用;在发生故障时,释放所述同步锁,以触发备服务器申请所述同步锁。进一步地,该方法还包括:在未获取到所述同步锁时,成为备服务器;在主服务器释放同步锁时,申请所述同步锁;在通过申请获取到主服务器释放的同步锁时,成为新的主服务器;获取所述应用信息,并根据所述应用信息继续执行对应的实时处理应用。进一步地,所述实时处理应用中,通过SQL语句定义关于该实时处理应用的处理操作。进一步地,关于该实时处理应用的处理操作,包括:创建所述实时处理应用的操作;对数据进行实时处理的操作。进一步地,该方法还包括:在获取实时处理应用的创建请求时,通过元数据存储将所述实时处理应用持久化保存至数据库中。进一步地,执行实时处理应用,包括:获取所述实时处理应用的SQL语句;根据所述SQL语句获取对数据进行实时处理的操作的操作符;将所述操作符提交至计算集群,由所述计算集群执行所述操作符,以实现对数据的实时处理操作。进一步地,获取所述实时处理应用的SQL语句,包括:通过元数据存储从数据库获取所述实时处理应用;获取所述实时处理应用中用于对数据进行实时处理的操作的SQL语句。进一步地,记录关于当前执行的实时处理应用的应用信息,包括:在协调服务系统中创建记录节点,向所述记录节点中写入关于当前执行的实时处理应用的应用信息。进一步地,该方法还包括:在停止执行所述实时处理应用时,删除协调服务系统中所述实时处理应用对应的应用信息以及记录节点。进一步地,获取所述应用信息,包括:从协调服务系统的记录节点中,读取关于当前执行的实时处理应用的应用信息。基于本申请的另一方面,还提供了一种实时处理引擎的故障恢复服务器,该服务器包括:切换装置,用于在获取到同步锁时,使本服务器成为主服务器,以及在发生故障时,释放所述同步锁,以触发备服务器申请所述同步锁;实时处理装置,用于在执行实时处理应用时,记录关于当前执行的实时处理应用的应用信息,以使备服务器在成为主服务器时,通过获取所述应用信息继续执行对应的实时处理应用。进一步地,所述切换装置,还用于在未获取到所述同步锁时,使本服务器成为备服务器;在主服务器释放同步锁时,申请所述同步锁;以及在通过申请获取到主服务器释放的同步锁时,使本服务器成为新的主服务器;所述实时处理装置,还用于获取所述应用信息,并根据所述应用信息继续执行对应的实时处理应用。进一步地,所述实时处理应用中,通过SQL语句定义关于该实时处理应用的处理操作。进一步地,关于该实时处理应用的处理操作,包括:创建所述实时处理应用的操作;对数据进行实时处理的操作。进一步地,所述实时处理装置,还用于在获取实时处理应用的创建请求时,通过元数据存储将所述实时处理应用持久化保存至数据库中。进一步地,所述实时处理装置,用于获取所述实时处理应用的SQL语句;根据所述SQL语句获取对数据进行实时处理的操作的操作符;以及将所述操作符提交至计算集群,由所述计算集群执行所述操作符,以实现对数据的实时处理操作。进一步地,所述实时处理装置,用于通过元数据存储从数据库获取所述实时处理应用;以及获取所述实时处理应用中用于对数据进行实时处理的操作的SQL语句。进一步地,所述实时处理装置,用于在协调服务系统中创建记录节点,向所述记录节点中写入关于当前执行的实时处理应用的应用信息。进一步地,所述实时处理装置,还用于在停止执行所述实时处理应用时,删除协调服务系统中所述实时处理应用对应的应用信息以及记录节点。进一步地,所述实时处理装置,用于从协调服务系统的记录节点中,读取关于当前执行的实时处理应用的应用信息。与现有技术相比,本申请提供的方案中,任意一个服务器在启动时若获取到同步锁,则成为主服务器对外提供服务;在主服务器对外提供服务器的过程中,若发生故障,主服务器将释放所述同步锁,以触发备服务器申请所述同步锁,使得备服务器可以获取到同步锁从而成为新的主服务器,此外,主服务器在执行实时处理应用时,记录关于当前执行的实时处理应用的应用信息,以使备服务器在成为主服务器时,通过获取所述应用信息继续执行对应的实时处理应用,从而实现故障的自动恢复。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1为本申请实施例中基于Zookeeper实现主备模式启动的示意图;图2为本申请实施例中实时处理任务的数据流图;图3为本申请实施例中利用Zookeeper进行实时处理应用状态追踪的示意图;图4为本申请实施例中基于Zookeeper实现故障恢复的示意图;图5为本申请实施例中服务器创建实时处理应用的处理流程图;图6为本申请实施例中主服务器执行实时处理应用的处理流程图;图7为本申请实施例中提供的一种实时处理引擎的故障恢复服务器的示意图;附图中相同或相似的附图标记代表相同或相似的部件。具体实施方式下面结合附图对本申请作进一步详细描述。在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。本申请实施例提供了一种实时处理引擎的故障恢复方法,该方法所适用的实时处理引擎中包含多个服务器,实时处理引擎启动时,多个服务器会同时启动去申请同步锁(Lock)。对于任意一个服务器(Server),在获取到同步锁时,成为主服务器(ActiveServer)。所述主服务器能够获得计算集群的资源使用权,对外提供服务,即实时处理引擎的数据处理功能,均由主服务器通过调用计算集群的资源来实现;而相应地,若服务器未获取到所述同步锁,则将成为备服务器(StandbyServer),所述备服务器不获得计算集群的资源使用权,不对外提供服务。在实际场景中,所述服务器会向协调服务系统Zookeeper申请同步锁,而所述计算集群可以为SparkCluster。在服务器获得计算集群的资源使用权时,可以通过SparkCluster提供的执行器Executor来完成相应的实时处理任务,具体如图1所示。实时处理引擎刚启动时,两个服务器同时启动,并向Zookeeper去申请一把同步锁,获得同步锁的服务器成为ActiveServer,并开始提供服务,并获得SparkCluster的资源使用权,另外一个未获取到同步锁的服务器则成为StandbyServer。在此,本领域技术人员应当理解,图中示出的各类元素的数量可能小于实际场景中相应元素的数量(例如服务器的数量可以超过两个,所有未获取到同步锁的服务器都将成为StandbyServer),但这种省略无疑地是以不会影响对本发明进行清楚、充分的公开为前提的。主服务器在对外提供服务时,通过使用计算集群的资源执行实时处理应用(application)完成数据的实时处理任务。对于一个基本的数据处理任务,至少包括:定义实时数据源,对来自数据源的数据进行分析处理,将处理结果输出到指定存储中。图2为本申请的一个实施例所涉及实时处理任务的数据流图,其中,采用分布式发布订阅消息系统kafka作为数据源,从kafka的某一个数据源分区(Partition)中读取实时数据,对实时数据的分析处理主要为将其中错误的日志信息(包含ERROR的日志信息)写入到数据库的结果表中。具体地,主服务器通过启动接收器Receiver从kafka中读取数据,然后通过过滤器Filter过滤不包含ERROR的日志信息,并将过滤后的数据通过Sink操作写到数据库Database的结果表中。在实际场景中,当主服务器发生故障时,将会释放所述同步锁,以触发备服务器申请所述同步锁。此时,对于备服务器,在主服务器释放同步锁时,申请所述同步锁,并在通过申请获取到主服务器释放的同步锁时,成为新的主服务器,由此实现主备服务器之间的自动切换。由此,为了保证实时处理任务也能够在主备切换时继续顺利进行,本申请实施例提供的方案中,在执行实时处理应用时,主服务器会记录关于当前执行的实时处理应用的应用信息,以使备服务器在成为主服务器时,通过获取所述应用信息继续执行对应的实时处理应用。即备服务器在成为新的主服务器时,将会获取所述应用信息,并根据所述应用信息继续执行对应的实时处理应用。在本申请的一个实施例中,主服务器可以利用协调服务系统(例如Zookeeper)来记录关于当前执行的实时处理应用的应用信息,具体处理过程包括:在协调服务系统中创建记录节点,然后向所述记录节点中写入关于当前执行的实时处理应用的应用信息。图3示出了一种利用Zookeeper进行实时处理应用状态追踪的示意图,其中,当实时处理应用启动后,主服务器会追踪实时处理应用的状态,并在内存中记录下当前运行的实时处理应用的应用信息,然后在Zookeeper中创建一个记录节点[/Running/app],用以记录应用信息。进一步地,在停止执行所述实时处理应用时,主服务器会删除协调服务系统中所述实时处理应用对应的应用信息以及记录节点。对于图3所示的实例,当实时处理应用停止执行时,主服务器会删除内存中关于该实时处理应用的应用信息,并会将Zookeeper上对应的记录节点[/Running/app]删除。相应地,备服务器在成为新的主服务器时,也是从协调服务系统的记录节点中,读取关于当前执行的实时处理应用的应用信息。通过由主服务器记录当前执行的实时处理应用的应用信息,以及备服务器在成为新的主服务器时,读取该应用信息,由此继续执行相关实时处理应用的方式,能够实现完整的故障自动恢复的机制。图4示出了本申请实施例的方案实现故障恢复的原理,当主服务器ActiverServer发生故障时,备服务器StandbyServer可以从协调服务系统Zookeeper中获得同步锁,由此成为新的ActiveServer,此时它将获得计算集群SparkCluster的资源使用权,并从Zookeeper中读取记录节点[/Running/app]中的应用信息,也就是原来的主服务器发生故障时还在运行的实时处理应用的相关信息。然后,新的ActiveServer将该实时处理应用重新提交到SparkCluster执行,以完成之前未完成的实时处理任务,实现故障的自动恢复。进一步地,本申请实施例的用于实现数据实施处理的实时处理应用中,通过SQL语句定义关于该实时处理应用的处理操作。具体地,这些关于该实时处理应用的处理操作,可以包括创建所述实时处理应用的操作,以及对数据进行实时处理的操作等。相较于现有技术中,例如ApacheFlink、SparkStreaming等实时处理引擎,需要通过编写Java、Scala等应用程序代码来定义上述操作,用户在定义关于实时处理应用的处理操作时,需要从头开始搭建编程环境、获取依赖的SDK、打包、部署到集群进行测试使用,需要熟悉各种API、分布式系统的逻辑,非常的复杂并且低效。而使用SQL语句来定义关于实时处理应用的处理操作,无需搭建编程环境、不依赖SDK,简化了配置、修改的过程,具有方便管理的优点。在本申请的一个实施例中,可以通过如下的SQL语句定义实时处理应用的相关处理操作。例如,创建所述实时处理应用的操作,可以是[createapplicationapp[properties(“parallelism”=”2”)]],而对数据进行实时处理的操作可以包括:定义Kafka上的实时数据源的操作[createstreamsource(idint,namestring,messagestring)streamproperties(“source”=”kafka”,kafka.zookeeper”=”broker:2181”,“topic”=”source”)];定义实时数据的过滤操作:[createstreamerrorLogsasselect*fromsourcewheremessagelike“%ERROR%”];以及将过滤后的数据写入结果表的操作:[insertintoresultselect*fromerrorlogs]等等。由于实时处理应用的相关处理操作需要通过SQL语句定义,因此本申请实施例所提供的方法中,实时处理应用的具体创建方式如下:服务器在获取实时处理应用的创建请求时,通过元数据存储将所述实时处理应用持久化保存至数据库中。其中,所述创建请求可以来自于客户端设备,用户通过客户端设备创建特定功能的实时处理应用,以完成相应的实时处理任务。因此,服务器Server在收到创建请求时,会通过元数据存储(MetaStore)将实时处理应用的相关信息保存至数据库中,具体地,所述数据库可以是MySQL等使用SQL语言的数据库。图5示出了本申请的一个实施例中创建实时处理应用的处理流程。在收到创建请求时,将创建请求(createrequest)发送至MetaStore,然后MetaStore再向MySQL发送相应的写入请求(writerequest),从而实现持久化的保存。具体地,实时处理应用的相关信息可以包括如下字段:实时处理应用的识别信息(ID)、名称(Name)、创建时间(CreateTime)、最近修改时间(LastModifyTime)以及对应的执行任务的SQL语句(Command)等,其在MySQL中的具体表结构如表1所示:字段类型是否为主键IDBigint(20)是NameVarchar(128)CreateTimeInt(11)LastModifyTimeInt(11)Commandmediumtext表1除此之外,在创建实时处理应用的时候,用户还会指定该实时处理应用在执行时的一些配置,表2示出了实时处理应用的配置在MySQL中的一种表结构,可以包含如下字段:实时处理应用的识别信息(ID)、参数键(PARAM_KEY)、参数值(PARAM_VALUE)等。字段类型是否为主键APP_IDBigint(20)是PARAM_KEYVarchar(128)是PARAM_VALUEVarchar(4000)表2在实际处理过程中,用户可以通过客户端设备Client使用SQL语句执行实时处理应用,例如[startapplicationapp]。主服务器在接收到该执行实时处理应用的命令后,其在执行实时处理应用的过程,具体包括如下处理步骤:首先,主服务器获取所述实时处理应用的SQL语句。在如前例所述的场景中,所述实时处理应用的相关信息通过MetaStore持久化保存于MySQL。此时,主服务器在获取SQL语句的处理过程中,将先通过元数据存储从数据库获取所述实时处理应用,即在接收到执行实时处理应用的命令后,向MetaStore发送请求,使得MetaStore再从MySQL的数据表中获取关于实时处理应用的相关信息,然后返回给主服务器。由于相关信息中包含了SQL语句,使得主服务器以获取所述实时处理应用中用于对数据进行实时处理的操作的SQL语句。例如,主服务器最终可以获取到实时处理应用的关于将过滤后的数据写入结果表的操作的SQL语句:[insertintoresultselect*fromerrorlogs]。然后,主服务器根据所述SQL语句获取对数据进行实时处理的操作的操作符。在本申请的一个实施例中,主服务器可以通过SQL编译器(Compiler)将实时处理应用的SQL语句解析生成一个执行计划(ExecutionPlan),该执行计划包括几个操作符:ROp是从Kafka中读取数据的操作符、FOp是中间过滤数据的操作符、SOp是最终结果输出的操作符。最后,主服务器将所述操作符提交至计算集群,由所述计算集群执行所述操作符,以实现对数据的实时处理操作。例如,以本申请实施例中的场景为例,主服务器将包含操作符的执行计划提交至SparkCluster,由SparkCluster中的执行器Executor进行执行,具体执行流程如图6所示。基于同一发明构思,本申请实施例中还提供了实时处理引擎的故障恢复服务器,该故障恢复服务器对应的方法是前述实施例中的实时处理引擎的故障恢复方法,并且其解决问题的原理与所述方法相似。图7示出了本申请实施例提供的一种实时处理引擎的故障恢复服务器,包括切换装置710和实时处理装置720。实时处理引擎中包含多个上述服务器,实时处理引擎启动时,多个服务器会同时启动去申请同步锁。对于任意一个服务器(Server),其切换装置710用于在获取到同步锁时,使本服务器成为主服务器(ActiveServer)。所述主服务器能够获得计算集群的资源使用权,对外提供服务,即实时处理引擎的数据处理功能,均由主服务器通过调用计算集群的资源来实现;而相应地,切换装置710用于在未获取到所述同步锁时,使本服务器成为备服务器(StandbyServer),所述备服务器不获得计算集群的资源使用权,不对外提供服务。在实际场景中,所述服务器会向协调服务系统Zookeeper申请同步锁,而所述计算集群可以为SparkCluster。在服务器获得计算集群的资源使用权时,可以通过SparkCluster提供的执行器Executor来完成相应的实时处理任务,具体如图1所示。实时处理引擎刚启动时,两个服务器同时启动,并向Zookeeper去申请一把同步锁,获得同步锁的服务器成为ActiveServer,并开始提供服务,并获得SparkCluster的资源使用权,另外一个未获取到同步锁的服务器则成为StandbyServer。在此,本领域技术人员应当理解,图中示出的各类元素的数量可能小于实际场景中相应元素的数量(例如服务器的数量可以超过两个,所有未获取到同步锁的服务器都将成为StandbyServer),但这种省略无疑地是以不会影响对本发明进行清楚、充分的公开为前提的。主服务器在对外提供服务时,通过使用计算集群的资源执行实时处理应用完成数据的实时处理任务。对于一个基本的数据处理任务,至少包括:定义实时数据源,对来自数据源的数据进行分析处理,将处理结果输出到指定存储中。图2为本申请的一个实施例所涉及实时处理任务的数据流图,其中,采用分布式发布订阅消息系统kafka作为数据源,从kafka的消息队列读取实时数据,对实时数据的分析处理主要为将其中错误的日志信息(包含ERROR的日志信息)写入到数据库的结果表中。具体地,主服务器通过启动接收器Receiver从kafka中读取数据,然后通过过滤器Filter过滤不包含ERROR的日志信息,并将过滤后的数据通过Sink操作写到数据库Database的结果表中。在实际场景中,当主服务器发生故障时,其切换装置710将会释放所述同步锁,以触发备服务器申请所述同步锁。此时,对于备服务器,其切换装置710会在主服务器释放同步锁时,申请所述同步锁,并在通过申请获取到主服务器释放的同步锁时,使本服务器成为新的主服务器,由此实现主备服务器之间的自动切换。由此,为了保证实时处理任务也能够在主备切换时继续顺利进行,本申请实施例提供的方案中,在执行实时处理应用时,主服务器的实时处理装置720会记录关于当前执行的实时处理应用的应用信息,以使备服务器在成为主服务器时,通过获取所述应用信息继续执行对应的实时处理应用。即备服务器在成为新的主服务器时,其实时处理装置720将会获取所述应用信息,并根据所述应用信息继续执行对应的实时处理应用。在本申请的一个实施例中,主服务器可以利用协调服务系统(例如Zookeeper)来记录关于当前执行的实时处理应用的应用信息,其实时处理装置720的具体处理过程包括:在协调服务系统中创建记录节点,然后向所述记录节点中写入关于当前执行的实时处理应用的应用信息。图3示出了一种利用Zookeeper进行实时处理应用状态追踪的示意图,其中,当实时处理应用启动后,主服务器会追踪实时处理应用的状态,并在内存中记录下当前运行的实时处理应用的应用信息,然后在Zookeeper中创建(create)一个记录节点[/Running/app],用以记录应用信息。进一步地,在停止执行所述实时处理应用时,主服务器的实时处理装置720会删除协调服务系统中所述实时处理应用对应的应用信息以及记录节点。对于图3所示的实例,当实时处理应用停止执行时,主服务器会删除内存中关于该实时处理应用的应用信息,并会将Zookeeper上对应的记录节点[/Running/app]删除(Remove)。相应地,备服务器在成为新的主服务器时,其实时处理装置720也是从协调服务系统的记录节点中,读取关于当前执行的实时处理应用的应用信息。通过由主服务器记录当前执行的实时处理应用的应用信息,以及备服务器在成为新的主服务器时,读取该应用信息,由此继续执行相关实时处理应用的方式,能够实现完整的故障自动恢复的机制。图4示出了本申请实施例的方案实现故障恢复的原理,当主服务器ActiverServer发生故障时,备服务器StandbyServer可以从协调服务系统Zookeeper中获得同步锁,由此成为新的ActiveServer,此时它将获得计算集群SparkCluster的资源使用权,并从Zookeeper中读取记录节点[/Running/app]中的应用信息,也就是原来的主服务器发生故障时还在运行的实时处理应用的相关信息。然后,新的ActiveServer将该实时处理应用重新提交到SparkCluster执行,以完成之前未完成的实时处理任务,实现故障的自动恢复。进一步地,本申请实施例的用于实现数据实施处理的实时处理应用中,通过SQL语句定义关于该实时处理应用的处理操作。具体地,这些关于该实时处理应用的处理操作,可以包括创建所述实时处理应用的操作,以及对数据进行实时处理的操作等。相较于现有技术中,例如ApacheFlink、SparkStreaming等实时处理引擎,需要通过编写Java、Scala等应用程序代码来定义上述操作,用户在定义关于实时处理应用的处理操作时,需要从头开始搭建编程环境、获取依赖的SDK、打包、部署到集群进行测试使用,需要熟悉各种API、分布式系统的逻辑,非常的复杂并且低效。而使用SQL语句来定义关于实时处理应用的处理操作,无需搭建编程环境、不依赖SDK,简化了配置、修改的过程,具有方便管理的优点。在本申请的一个实施例中,可以通过如下的SQL语句定义实时处理应用的相关处理操作。例如,创建所述实时处理应用的操作,可以是[createapplicationapp[properties(“parallelism”=”2”)]],而对数据进行实时处理的操作可以包括:定义Kafka上的实时数据源的操作[createstreamsource(idint,namestring,messagestring)streamproperties(“source”=”kafka”,kafka.zookeeper”=”broker:2181”,“topic”=”source”)];定义实时数据的过滤操作:[createstreamerrorLogsasselect*fromsourcewheremessagelike“%ERROR%”];以及将过滤后的数据写入结果表的操作:[insertintoresultselect*fromerrorlogs]等等。由于实时处理应用的相关处理操作需要通过SQL语句定义,因此本申请实施例所提供的服务器中,实时处理应用的具体创建方式如下:服务器在获取实时处理应用的创建请求时,通过元数据存储将所述实时处理应用持久化保存至数据库中。其中,所述创建请求可以来自于客户端设备,用户通过客户端设备创建特定功能的实时处理应用,以完成相应的实时处理任务。因此,服务器Server在收到创建请求时,会通过元数据存储(MetaStore)将实时处理应用的相关信息保存至数据库中,具体地,所述数据库可以是MySQL等使用SQL语言的数据库。图5示出了本申请的一个实施例中,创建实时处理应用的处理流程。服务器在收到创建请求时,将创建请求(createrequest)发送至MetaStore,然后MetaStore再向MySQL发送相应的写入请求(writerequest),从而实现持久化的保存。具体地,实时处理应用的相关信息可以包括如下字段:实时处理应用的识别信息(ID)、名称(Name)、创建时间(CreateTime)、最近修改时间(LastModifyTime)以及对应的执行任务的SQL语句(Command)等,其在MySQL中的具体表结构如表1所示:除此之外,在创建实时处理应用的时候,用户还会指定该实时处理应用在执行时的一些配置,表2示出了实时处理应用的配置在MySQL中的一种表结构,可以包含如下字段:实时处理应用的识别信息(ID)、参数键(PARAM_KEY)、参数值(PARAM_VALUE)等。在实际处理过程中,用户可以通过客户端设备Client使用SQL语句执行实时处理应用,例如[startapplicationapp]。主服务器在接收到该执行实时处理应用的命令后,其实时处理装置72执行实时处理应用的过程,具体包括如下处理步骤:首先,主服务器的实时处理装置720获取所述实时处理应用的SQL语句。在如前例所述的场景中,所述实时处理应用的相关信息通过MetaStore持久化保存于MySQL。此时,主服务器在获取SQL语句的处理过程中,其实时处理装置720将先通过元数据存储从数据库获取所述实时处理应用,即在接收到执行实时处理应用的命令后,向MetaStore发送请求,使得MetaStore再从MySQL的数据表中获取关于实时处理应用的相关信息,然后返回给主服务器。由于相关信息中包含了SQL语句,使得主服务器以获取所述实时处理应用中用于对数据进行实时处理的操作的SQL语句。例如,主服务器最终可以获取到实时处理应用的关于将过滤后的数据写入结果表的操作的SQL语句:[insertintoresultselect*fromerrorlogs]。然后,主服务器的实时处理装置720根据所述SQL语句获取对数据进行实时处理的操作的操作符。在本申请的一个实施例中,主服务器可以通过SQL编译器(Compiler)将实时处理应用的SQL语句解析生成一个执行计划(ExecutionPlan),该执行计划包括几个操作符:ROp是从Kafka中读取数据的操作符、FOp是中间过滤数据的操作符、SOp是最终结果输出的操作符。最后,主服务器的实时处理装置720将所述操作符提交至计算集群,由所述计算集群执行所述操作符,以实现对数据的实时处理操作。例如,以本申请实施例中的场景为例,主服务器将包含操作符的执行计划提交至SparkCluster,由SparkCluster中的执行器Executor进行执行,具体执行流程如图6所示。综上所述,本申请提供的方案中,任意一个服务器在启动时若获取到同步锁,则成为主服务器对外提供服务;在主服务器对外提供服务器的过程中,若发生故障,主服务器将释放所述同步锁,以触发备服务器申请所述同步锁,使得备服务器可以获取到同步锁从而成为新的主服务器,此外,主服务器在执行实时处理应用时,记录关于当前执行的实时处理应用的应用信息,以使备服务器在成为主服务器时,通过获取所述应用信息继续执行对应的实时处理应用,从而实现故障的自动恢复。此外,本申请的方案使用SQL语句来定义关于实时处理应用的处理操作,无需搭建编程环境、不依赖SDK,简化了配置、修改的过程,具有方便管理的优点。需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1