CN117235134A - 一种复杂事件处理的方法及装置 - Google Patents
一种复杂事件处理的方法及装置 Download PDFInfo
- Publication number
- CN117235134A CN117235134A CN202311234738.XA CN202311234738A CN117235134A CN 117235134 A CN117235134 A CN 117235134A CN 202311234738 A CN202311234738 A CN 202311234738A CN 117235134 A CN117235134 A CN 117235134A
- Authority
- CN
- China
- Prior art keywords
- event
- data
- matching
- information database
- scheduling
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 194
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000011144 upstream manufacturing Methods 0.000 claims abstract description 21
- 239000012634 fragment Substances 0.000 claims description 17
- 238000003860 storage Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 12
- 238000003672 processing method Methods 0.000 claims description 7
- 230000009467 reduction Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 description 28
- 238000010586 diagram Methods 0.000 description 14
- 238000009826 distribution Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000008602 contraction Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011038 discontinuous diafiltration by volume reduction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种复杂事件处理的方法及装置,应用在分布式计算技术领域,包括:获取上游系统上报的事件数据;针对任一事件数据,基于事件匹配规则确定事件信息数据库中是否存在事件数据的匹配事件,并基于匹配结果将事件数据记录于事件信息数据库;事件信息数据库为多个上游系统共用;针对事件信息数据库中的任一记录,将在事件窗口内未得到匹配事件的记录生成断点事件,并将断点事件对应的断点消息发送至下游系统。通过事件信息数据库实现对复杂事件进行存储和处理,实现了多机房部署的场景,避免数据量过大或者窗口期时间设定过大而造成分布式流处理应用出现宕机,进而造成数据丢失或内存溢出的问题。
Description
技术领域
本发明实施例涉及分布式计算技术领域,尤其涉及一种复杂事件处理的方法及装置。
背景技术
FLINK是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。复杂事件处理(Complex Event Processing,简称为CEP)是一种在FLINK框架下的流处理的技术。CEP通过一个或多个由简单事件构成事件流,再通过一定的规则匹配,然后输出用户想得到的数据,即输出满足规则的复杂事件。
虽然FLINK支持复杂事件处理,但是在实际使用中,数据都会进入到FLINK的应用的内存中,由于每个机房都有自己的应用,各应用之间的事件数据并不互通,无法满足应用多机房部署的场景。如果在数据量较大的情况下,随着内存使用时间的增加,影响内存的数据处理性能,还会出现数据溢出的情况。
发明内容
本申请实施例提供了一种复杂事件处理方法及装置,用于实现对复杂事件进行处理。
第一方面,本申请实施例提供了一种复杂事件处理方法,应用于分布式流处理应用,包括:
获取上游系统上报的事件数据;
针对任一事件数据,基于事件匹配规则确定事件信息数据库中是否存在所述事件数据的匹配事件,并基于匹配结果将所述事件数据记录于所述事件信息数据库;所述事件信息数据库为多个上游系统共用;
针对所述事件信息数据库中的任一记录,将在事件窗口内未得到匹配事件的记录生成断点事件,并将所述断点事件对应的断点消息发送至下游系统。
通过事件信息数据库实现对复杂事件进行存储和处理,实现了多机房部署的场景,避免数据量过大或者窗口期时间设定过大而造成分布式流处理应用出现宕机,进而造成数据丢失或内存溢出的问题。另外在分布式流处理应用发起调度任务之前,已根据匹配规则完成对事件数据的匹配,提高了后续调度任务对断点事件处理的时效性。
可选地,所述基于事件匹配规则确定事件信息数据库中是否存在所述事件数据的匹配事件,包括:
确定所述事件数据的事件类型;
若所述事件类型为开始事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的结束事件;
若所述事件类型为结束事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的开始事件。
可选地,所述基于匹配结果将所述事件数据记录于所述事件信息数据库,包括:
若存在所述事件数据的匹配事件,则将所述匹配事件对应的匹配类型标识、所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库;所述事件数据具有至少一个匹配事件;任一调度时间为事件上报时间与事件窗口之和;
若不存在所述事件数据的匹配事件,则将所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库。
可选地,所述将在事件窗口内未得到匹配事件的记录生成断点事件,包括:
通过调度任务,将在事件窗口内未得到匹配事件的记录生成断点事件;所述调度任务是通过所述分布式流处理应用中的实例完成的;所述分布式流处理应用通过任务并行度参数设置可并行执行的多个实例。
可选地,所述基于匹配结果将所述事件数据记录于所述事件信息数据库,包括:
基于所述事件数据的事件维度确定所述事件信息数据库中的数据分片列表;
基于匹配结果将所述事件数据记录于所述数据分片列表中,每个数据分片列表对应有用于处理该数据分片的实例。
采用根据并行度设定TASKMANAGER个数并分配好SLOT序号,以及每个SLOT序号对应处理的数据分片,不同的TASKMANAGER处理不同的数据分片任务,实现SLOT管理分配的模块,提高了处理性能,有效地保障在扩缩容的场景下,数据正常处理不丢失,保证数据的准确性和时效性。
可选地,还包括:
在所述分布式流处理应用的多个实例进行扩容或缩容时,将所述多个实例对应的数据分片列表的记录分配至扩容或缩容后的实例对应的数据分片列表中。
在本申请中分布式流处理应用支持根据任务并行度参数实时分配SLOT的个数,即存在对执行任务的SLOT进行缩容和扩容的场景。在SLOT进行缩容、扩容的过程后,也保证数据的准确性和时序性。
可选地,所述将在事件窗口内未得到匹配事件的记录生成断点事件,包括:
确定在所述分布式流处理应用中的执行调度表中不存在调度时间;
基于所述数据分片列表中的实例序号查询调度序号表,得到所述数据分片列表对应的执行调度表,所述调度序号表位于所述事件信息数据库中,用于记录任一调度时间下对应事件数据的序号;所述执行调度表位于所述分布式流处理应用中,用于记录所述分布式流处理应用对所述断点事件进行调度的调度信息;
基于所述数据分片列表、所述调度序号表和所述执行调度表生成断点事件。
可选地,判断所述执行调度表不为空;
确定所述执行调度表中的最小调度时间和最大调度时间;
基于所述事件数据记录的序号确定最小调度时间对应的记录是否触发断点事件,直至处理完最大调度时间对应的记录。
可选地,所述事件匹配规则是通过用户设置得到的;
所述事件匹配规则包括一对一匹配规则、一对多匹配规则、多对一匹配规则及嵌套匹配规则;
所述一对一匹配规则为一个开始事件对应一个结束事件;
所述一对多匹配规则为一个开始事件对应多个结束事件;
所述多对一匹配规则为多个开始事件对应一个结束事件;
所述嵌套匹配规则为开始事件由另一开始事件和结束事件组成,或结束事件由另一开始事件和结束事件组成。
通过制定复杂事件的匹配规则,支持复杂规则嵌套,可以将匹配事件和断点事件结合在一起嵌套使用,即可以将匹配事件进行组合形成新的开始事件,这样可以生成新的匹配事件和断点事件,以支持多种事件规则的复杂场景。由于存在一条事件数据可以支持多个匹配规则,在存储匹配规则时,减少了匹配规则数据的存储量,不需要根据不同的场景来进行不同匹配规则的储存。
第二方面,本申请实施例提供了一种复杂事件处理的装置,包括:
获取模块,用于获取上游系统上报的事件数据;
处理模块,用于针对任一事件数据,基于事件匹配规则确定事件信息数据库中是否存在所述事件数据的匹配事件,并基于匹配结果将所述事件数据记录于所述事件信息数据库;所述事件信息数据库为多个上游系统共用;
所述处理模块,还用于针对所述事件信息数据库中的任一记录,将在事件窗口内未得到匹配事件的记录生成断点事件,并将所述断点事件对应的断点消息发送至下游系统。
通过事件信息数据库实现对复杂事件进行存储和处理,实现了多机房部署的场景,避免数据量过大或者窗口期时间设定过大而造成分布式流处理应用出现宕机,进而造成数据丢失或内存溢出的问题。另外在分布式流处理应用发起调度任务之前,已根据匹配规则完成对事件数据的匹配,提高了后续调度任务对断点事件处理的时效性。
可选地,所述处理模块具体用于:
确定所述事件数据的事件类型;
若所述事件类型为开始事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的结束事件;
若所述事件类型为结束事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的开始事件。
可选地,所述处理模块具体用于:
若存在所述事件数据的匹配事件,则将所述匹配事件对应的匹配类型标识、所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库;所述事件数据具有至少一个匹配事件;任一调度时间为事件上报时间与事件窗口之和;
若不存在所述事件数据的匹配事件,则将所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库。
可选地,所述处理模块具体用于:
通过调度任务,将在事件窗口内未得到匹配事件的记录生成断点事件;所述调度任务是通过所述分布式流处理应用中的实例完成的;所述分布式流处理应用通过任务并行度参数设置可并行执行的多个实例。
可选地,所述处理模块具体用于:
基于所述事件数据的事件维度确定所述事件信息数据库中的数据分片列表;
基于匹配结果将所述事件数据记录于所述数据分片列表中,每个数据分片列表对应有用于处理该数据分片的实例。
可选地,所述处理模块具体用于:
在所述分布式流处理应用的多个实例进行扩容或缩容时,将所述多个实例对应的数据分片列表的记录分配至扩容或缩容后的实例对应的数据分片列表中。
可选地,所述处理模块具体用于:
确定在所述分布式流处理应用中的执行调度表中不存在调度时间;
基于所述数据分片列表中的实例序号查询调度序号表,得到所述数据分片列表对应的执行调度表,所述调度序号表位于所述事件信息数据库中,用于记录任一调度时间下对应事件数据的序号;所述执行调度表位于所述分布式流处理应用中,用于记录所述分布式流处理应用对所述断点事件进行调度的调度信息;
基于所述数据分片列表、所述调度序号表和所述执行调度表生成断点事件。
可选地,所述处理模块具体用于:
判断所述执行调度表不为空;
确定所述执行调度表中的最小调度时间和最大调度时间;
基于所述事件数据记录的序号确定最小调度时间对应的记录是否触发断点事件,直至处理完最大调度时间对应的记录。
可选地,所述处理模块具体用于:
所述事件匹配规则包括一对一匹配规则、一对多匹配规则、多对一匹配规则及嵌套匹配规则;
所述一对一匹配规则为一个开始事件对应一个结束事件;
所述一对多匹配规则为一个开始事件对应多个结束事件;
所述多对一匹配规则为多个开始事件对应一个结束事件;
所述嵌套匹配规则为开始事件由另一开始事件和结束事件组成,或结束事件由另一开始事件和结束事件组成。
第三方面,本申请实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行上述第一方面任意所述的复杂事件处理方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其存储有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行上述第一方面任意所述的复杂事件处理方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种系统架构示意图;
图2为本申请实施例提供的一种复杂事件处理方法的流程示意图;
图3为本申请实施例提供的一种分布式处理流应用启动流程示意图;
图4为本申请实施例提供的一种分布式处理流应用得到匹配结果的流程示意图;
图5为本申请实施例提供的一种对分布式流处理应用的多个实例进行扩容或缩容的示意图;
图6为本申请实施例提供的一种分布式处理流应用处理断点事件的流程示意图;
图7为本申请实施例提供的一种复杂事件处理装置的结构示意图;
图8为本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了方便理解,下面对本发明实施例中涉及的名词进行解释。
FLINK:是一个分布式的、高性能的、可伸缩的、容错的流处理引擎框架,它可以处理无限量的数据,并在真正的实时上下文中运行,支持批处理和流处理,是实时数据处理的理想选择。
分布式流处理应用:是基于FLINK流处理引擎框架下的应用,也称为FLINK应用。
复杂事件处理(Complex Event Processing,简称为CEP):是一种在FLINK框架下的流处理的技术。复杂事件处理是一种新兴的基于事件流的技术,它将系统数据看作是不同类型的事件,事件在这里通常是有意义的状态变化,通过分析事件间的关系,利用过滤、关联、聚合等技术,根据事件间的时序关系和聚合关系定制检测规则,持续地从事件流中查询出符合要求的事件序列,最终分析得到更加复杂的复合事件。
任务管理器(称为TASKMANAGER):是FLINK应用的工作进程,在本申请中一个TASKMANAGER为一个实例。
任务并行度参数:一个数据流的并行度可以认为是其所有算子中最大的并行度。在FLINK应用中表示应用最大可以同时由多个并行实例(线程)来执行,该FLINK应用并行实例(线程)数目就被称为该应用的任务并行度。
SLOT:为FLINK应用中任务执行时所申请资源的最小单元,在本申请中一个TASKMANAGER对应的数据分片,放在一个SLOT中。
SLOT管理分配模块:基于FLINK的TASKMANAGER线程实现数据存储注册模块
RMB:一个消息调用及传播系统,也可以是一种消息中间件。
事件维度:业务可配置,本文举例,维度为用户ID。
匹配事件:开始事件到来后,结束事件在规定窗口期内到达,举例是用户开户后24小时内借款,需要发送匹配事件的消息。
断点事件:开始事件到来后,结束事件未在规定窗口期内到达,举例是用户开户后24小时内未借款,需要发送断点事件的消息。
复杂事件:包含匹配事件和断点事件的场景。
现有技术中,FLINK的应用接收到上游系统发来的复杂事件数据,复杂事件数据都会进入到FLINK的应用的内存中,所有等待的复杂事件数据都会进入到应用的内存中,直到复杂事件数据被匹配或者超过设置的窗口事件被丢弃。若事件设定的窗口期较长,随着时间推移内存使用会一直上升,可能会导致应用内存中的数据溢出。一方面,现有技术中的复杂事件匹配通过应用的内存来实现,而现有的银行架构体系为多机房场景,每个机房有各自的内存,即每个机房仅可根据自己的数据进行匹配,两个机房的应用之间的复杂事件数据并不互通,也无法满足应用分布式部署的场景;另一方面,由于在应用发起调度任务之后,获取到复杂事件数据才进行事件的匹配,无法保证数据匹配发送的时效性。当FLINK应用出现宕机、重启的情况,在应用重启的时间内数据容易丢失,因此上述方案中无法对数据进行连续处理,更无法保证数据的准确性和时序性。
另外,现有技术中FLINK应用配置的匹配规则只支持一对一的形式,即一个开始事件只对应一个结束事件,若存在多个动作的事件时,例如用户点击--用户开户--用户借款,就需要分别配置两个匹配规则,即分别设置匹配事件A(用户点击1小时进行开户),匹配事件B(用户开户后24小时进行借款),使得现有技术中的FLINK应用对复杂乱序事件的处理不够灵活,还增加了配置规则信息的数据量。
图1为本申请提供的系统架构图,包括上游系统、A机房、B机房、下游系统、事件信息数据库(TIDB)、消息中间件(RMB);其中,A机房包括配置信息数据库(TDSQL)、FLINK应用;B机房包括配置信息数据库(TDSQL)、FLINK应用。以A机房举例说明整体流程为:上游系统通过消息中间件RMB将事件数据发送至A机房FLINK应用处,FLINK应用调用配置信息数据库(TDSQL)中的事件配置数据,对事件数据进行匹配,将满足匹配规则的事件写入事件信息数据库(TIDB)中相应的事件表中,FLINK应用通过调度任务扫描事件信息数据库(TIDB)中的事件数据,通过消息中间件RMB发送至下游系统中。B机房的事件处理过程同上。
图2示例性的示出了一种复杂事件处理方法的流程,应用于分布式流处理应用,包括:
步骤S201,获取上游系统上报的事件数据。
具体地,分布式流处理应用通过消息中间件RMB获取上游系统上报的事件数据。其中,事件数据包括至少一个事件维度信息,事件维度信息可以为用户的身份标识(IdentityDocument,简称为ID)。
步骤S202,针对任一事件数据,基于事件匹配规则确定事件信息数据库中是否存在事件数据的匹配事件,并基于匹配结果将事件数据记录于事件信息数据库;事件信息数据库为多个上游系统共用。
具体地,分布式流处理应用和事件规则有绑定关系,用户根据需要对分布式流处理应用和该应用对应事件规则进行配置,配置会保存到配置信息数据库(TDSQL)中。对于任一事件数据,分布式流处理应用从配置信息数据库(TDSQL)中获取该应用对应的匹配规则,并判断在事件信息数据库中是否在满足匹配规则的匹配事件,若满足匹配规则,则将匹配的事件记录在事件信息数据库中匹配的表格中,若不满足匹配规则,则将未匹配的事件记录在事件信息数据库中未匹配的表格中。其中,事件信息数据库为多个上游系统共用的,因此,在事件数据库中匹配的表格上记录的是根据多个上游系统上报的事件数据,再根据匹配规则确定的匹配事件和未得到匹配的事件。
步骤S203,针对事件信息数据库中的任一记录,将在事件窗口内未得到匹配事件的记录生成断点事件,并将断点事件对应的断点消息发送至下游系统。
具体地,事件窗口是根据使用场景人为设置在匹配规则中的,用于表示在一条匹配规则中,两条匹配事件的时间差。例如,在匹配规则中,设定的事件窗口为24小时,若A、B两条事件之间的时间差为13小时,则A、B两条事件满足该事件窗口;若C、D两条事件之间的差大于24小时,则C、D两条事件并不满足该事件窗口,将C、D记录在事件信息数据库中未匹配的表格中。另外,若事件E发生后,没有与之匹配满足匹配规则的事件数据,则将事件E记录在事件信息数据库中未匹配的表格中。将这些记录在事件信息数据库中未匹配的表格中的事件的记录生成断点事件,发往下游系统。例如,若用户A进行了点击操作,分布式流处理应用获取该点击事件,该点击事件对应的匹配规则为用户点击操作后12小时内进行借款操作,若在12小时内,分布式流处理应用没有获取到借款事件,则将用户A的点击事件的记录到事件信息数据库中未匹配的表格中,再将用户A的点击事件生成为断点事件,发送至下游系统,下游系统可以对该用户A进行广告推送等操作。
通过事件信息数据库实现对复杂事件进行存储和处理,实现了多机房部署的场景,避免数据量过大或者窗口期时间设定过大而造成分布式流处理应用出现宕机,进而造成数据丢失或内存溢出的问题。另外在分布式流处理应用发起调度任务之前,已根据匹配规则完成对事件数据的匹配,提高了后续调度任务对断点事件处理的时效性。
其中,在获取上游系统上报的事件数据之前,分布式处理流应用会先进行启动,启动流程如图3所示,包括以下内容:
步骤S301,分布式流处理应用启动;
步骤S302,设置任务并行度参数;
具体地,分布式流处理应用启动时,会根据设置的任务并行度参数,来分配实例数,即分配TASKMANAGER的个数,其中,每个TASKMANAGER对应的数据分片放在一个SLOT里。分布式流处理应用里有一张启动日志表,记录分布式流处理应用每次的启动信息。每一次启动还对应有一张SLOT注册表,注册SLOT后会在SLOT注册表记录SLOT号、应用本次启动的信息、SLOT数据分片列表等。
步骤S303,根据启动日志表获取上一次的启动信息;
具体地,根据应用启动日志表获取上一次启动的信息,根据应用上一次启动的信息来查询SLOT注册表获取SLOT信息列表,以此来实现SLOT管理分配模块。
步骤S304,根据启动日志表获取已经保存的SLOT信息列表;
具体地,分布式流处理应用每一次启动在启动日志表中还对应有一张SLOT注册表,用于记录每次启动后注册的SLOT号、应用本次启动的信息、SLOT里面对应的数据分片列表等。
步骤S305,SLOT注册表的判断;
具体地,SLOT管理分配模块会有关于SLOT注册表的判断。
步骤S306,初始化SLOT信息,设置状态为INIT,设置后直接进入步骤S311;
具体地,如果SLOT注册表为空,说明应用是首次启动,则根据当前分配的实例数记录在SLOT注册表,并保存入事件信息数据库(TIDB)中。
步骤S307,SLOT记录数判断;
具体地,如果SLOT注册表不为空,说明应用是正常重启;则判断SLOT注册表中记录的SLOT的个数。
步骤S308,应用正常重启;
具体地,如果当前实例数和记录SLOT的个数一致,复制SLOT注册表,设置SLOT相应的状态为初始化(initialization,简称为INIT),并保存入事件信息数据库(TIDB)。
步骤S309,应用扩容重启;
具体地,如果当前实例数大于SLOT注册表中记录的SLOT的个数,则说明应用是扩容重启,复制SLOT注册表后还需新增对应扩容的SLOT信息,设置状态为INIT保存入库。
步骤S310,应用缩容重启;
具体地,如果当前实例数少于SLOT记录数,说明应用是缩容重启,将SLOT注册表求余,放入对应缩容后的SLOT信息列表,记录需要处理的SLOT数据分片列表,设置状态为INIT保存入库。
步骤S311,TASKMANAGER加载注册的SLOT信息;
具体地,TASKMANAGER加载SLOT注册表中的SLOT注册信息。
步骤S312,加载时获取一个未被注册的SLOT加锁查;
步骤S313,更新SLOT表信息为READY状态;
具体地,TASKMANAGER在初始化的过程中,会获取未被注册的SLOT信息,获取完成则更新SLOT信息为READY状态,代表该SLOT已经被注册。
步骤S314,更新状态判断;
具体地,如果更新失败,则进入步骤S316重试查询更新。
步骤S315,登记分布式处理流应用状态;
具体地,登记分布式处理流应用状态为scheduler_SLOT,并在分布式处理流应用初始化时加载。
步骤S316,重新查询更新,跳转至步骤S312;
步骤S317,启动结束。
在上述步骤S202中,基于事件匹配规则确定事件信息数据库中是否存在事件数据的匹配事件,包括:确定事件数据的事件类型;若事件类型为开始事件,则基于事件匹配规则确定事件信息数据库中是否存在与事件数据匹配的结束事件;若事件类型为结束事件,则基于事件匹配规则确定事件信息数据库中是否存在与事件数据匹配的开始事件。
具体地,分布式流处理应用对事件的事件类型进行识别,识别判断事件类型为事件为开始事件还是结束事件,若事件类型为开始事件,则判断在事件信息数据库(TIDB)中是否存在满足该事件数据的匹配规则和相同事件维度的结束事件。其中,匹配规则包括结束事件和事件窗口,事件窗口为匹配规则中开始事件和结束事件之间的事件差。事件维度可以为用户ID等。若事件类型为结束事件,则判断在事件信息数据库(TIDB)中是否存在满足该事件数据的匹配规则和相同事件维度的开始事件。以分布式流处理应用对事件的事件类型进行识别,识别判断事件类型为事件为开始事件举例来说,若分布式流处理应用识别事件A为:用户1的点击事件,识别判断该事件A类型为开始事件,通过调取事件信息数据库(TIDB)中该事件A的匹配规则1为:点击之后12小时内,用户进行借款,在该匹配规则中点击事件为开始事件,12小时内为事件窗口,借款事件为结束事件。若事件信息数据库中包括相同的用户1的事件B:借款事件。若该结束事件的事件窗口为6个小时,说明该事件B为事件A的匹配的结束事件。用户1的点击事件和借款事件满足匹配规则1,即事件A和事件B完成匹配。
在一些实施例中,若分布式流处理应用识别出事件类型为开始事件,若判断在事件信息数据库(TIDB)中存在相同事件维度的开始事件时,说明用户进行了相同的事件操作,需要在事件信息数据库(TIDB)中记录最新的事件数据。过程为分布式流处理应用判断两个开始事件的上报时间,用上报时间大的开始事件替换上报时间小的开始事件,完成对开始事件的更新。举例来说,事件数据为开始事件2:用户进行点击操作,开始事件2的上报时间为10点,在事件信息数据库(TIDB)中发现相同维度的开始事件3:用户进行点击操作,开始事件2的上报时间为9点,即用户进行了两次点击操作,将开始事件2替换事件信息数据库(TIDB)中的开始事件3。
在上述步骤S202中的基于匹配结果将事件数据记录于事件信息数据库,包括:若存在事件数据的匹配事件,则将匹配事件对应的匹配类型标识、事件数据的调度时间及事件数据记录于事件信息数据库;事件数据具有至少一个匹配事件;任一调度时间为事件上报时间与事件窗口之和;若不存在事件数据的匹配事件,则将事件数据的调度时间及事件数据记录于事件信息数据库。
具体地,若事件A存在与之匹配的事件B,则对事件A和事件B进行标识,该标识表示事件A和事件B匹配成功,事件A和事件B可以形成匹配事件1。该匹配事件对应的有事件数据的调度时间,调度时间为事件上报时间与该事件对应的匹配规则的事件窗口之和,其中事件数据记录还包含应用启动信息、数据分片号、当前调度时间对应的序号、当前调度时间的循环次数。将数据库中的数据进行切分,将每份数据存放在不同或者相同数据分片中,每个数据分片都具有一个编号。在一个数据分片中,会存在至少一个调度时间,同一个调度时间下会存在多条事件数据,统计同一调度时间下的多条事件总条数,记为在该调度时间下的最大序号。当前调度时间下的循环次数,若根据场景需要,以100条数据为一个循环,当前调度时间下的事件数的总条数对100取模,可以得到当前调度时间的循环次数。举例来说,在数据分片1下,存在调度时间11点,在11点对应事件A、W、G、J、I、F、V、H,则在11点的调度时间下的最大序号为8,若这8个事件的数据总条数为605条,则说明在11点的调度时间下的循环次数为7。若事件A不存在与之匹配的事件B,则将事件A也存入到事件信息数据库中,具体存入的事件信息同上,在此不再做详细赘述。
如图4所示,为本申请提供的分布式流处理应用基于匹配规则对事件数据进行匹配,得到匹配结果的处理流程图,具体包括以下步骤:
步骤S401,输入消息中间件(RMB)监听事件数据;
步骤S402,事件数据进入分布式流处理应用;
步骤S403,事件数据登记在对应的SLOT中;
具体地,由于分布式流处理应用使用的是异步多线程的方式处理事件数据,将接收到的事件数据进行解析后,根据事件维度将事件数据分发至分布式流处理应用注册的SLOT中,并记录SLOT的序号,该事件数据会由具有相应SLOT序号的TASKMANAGER进行处理。其中,事件维度可以为事件的用户ID等特征信息。
另外,事件保存到数据库的过程中,会用MD4算法将维度字段加密后存储起来,作为索引字段查询,保证该字段存在数据库是定长的,不会造成大字段的存储查询性能低下。同时由于事件数据中有往下游发送的RMB报文数据,这块会采用GZIP的方式进行加密存储,在发送过程中则进行解密。这个的好处是优化大批量数据的查询效率,减少网络损耗。
步骤S404,识别事件数据的类型;
步骤S405,识别事件数据为开始事件,则进入步骤S407;
步骤S406,识别事件数据为结束事件,则进入步骤S415;
步骤S407,对开始事件数据进行判断;
具体地,若在事件信息数据库(TIDB)中不存在周期内相同纬度的开始事件,则进入步骤S408;若在事件信息数据库(TIDB)中存在周期内相同纬度的开始事件,进入步骤S409,对开始事件进行更新;
步骤S408,事件入库判断;
具体地,若不存在周期内相同纬度的结束事件,说明该开始事件没有与之对应的结束事件,匹配失败,生成断点事件,进入步骤S420;若存在周期内相同纬度的结束事件,说明该开始事件与对应的结束事件匹配成功,生成匹配事件,则进入步骤S412;
步骤S409,更新事件判断;
具体地,若不存在周期内相同纬度的结束事件、或者开始事件的调度时间比事件信息数据库(TIDB)的大,都进入步骤S410;若存在周期内相同纬度的结束事件,说明该开始事件与对应的结束事件匹配成功,生成匹配事件,进入步骤S414;
步骤S410,开始事件更新入库,进入步骤S414;
具体地,开始事件更新入库后,需要更新记录当前调度时间的最大序号,记录到调度序号表中,数据为应用启动信息、SLOT号、调度时间、调度时间对应的最大序号,为后续调度任务执行提供数据索引的查询支撑。
步骤S411,开始事件入库;
具体地,将开始事件记录到事件信息数据库(TIDB)中。
步骤S412,开始事件设置为被删除状态并入库;
具体地,若存在周期内相同纬度的结束事件,说明该开始事件与对应的结束事件匹配成功,将事件信息数据库(TIDB)的开始事件删除。
步骤S413,发送匹配事件;
具体地,将生成的匹配事件发送至输出的消息队列中。
步骤S414,记录调度时间下对应事件数据的序号;
具体地,同一调度时间下会有多个事件数据,以调度时间为维度,统计在每个SLOT里,在统一调度时间下的事件数据的序号和总和。
步骤S415,结束事件入库;
步骤S416,删除在结束事件周期内的同维度的开始事件;
具体地,若存在周期内相同纬度的开始事件,说明该结束事件与对应的开始事件匹配成功,将事件信息数据库(TIDB)的开始事件删除;
步骤S417,匹配发送判断;
具体地,若存在周期内相同纬度的开始事件,说明该结束事件与对应的开始事件匹配成功,生成匹配事件,进入步骤S418;若不存在周期内相同纬度的开始事件,说明没有与该结束事件与对应的开始事件,生成断点事件,进入步骤S420。
步骤S418,发送匹配事件;
步骤S419,输出消息队列将匹配事件发送至下游系统;
步骤S420,生成断点事件。
在一些实施例中,将在事件窗口内未得到匹配事件的记录生成断点事件,包括:通过调度任务,将在事件窗口内未得到匹配事件的记录生成断点事件;调度任务是通过分布式流处理应用中的实例完成的;分布式流处理应用通过任务并行度参数设置可并行执行的多个实例。
具体地,将事件窗口内未得到匹配事件的记录生成断点事件,保存在事件信息数据库中,通过分布式流处理应用发起的调度任务,并由分布式流处理应用中的实例从事件信息数据库中获取断点事件,将断点事件发往下游系统。其中,实例的个数根据设置的任务并行度参数决定的,任务并行度参数在分布式流处理应用中表示应用最大可以同时由多个并行实例(线程)来执行,该分布式流处理应用并行实例(线程)数目就被称为该应用的任务并行度。在本申请中,一个TASKMANAGER为一个实例,每个实例对应一个数据分片,数据分片放在一个SLOT里。
基于匹配结果将事件数据记录于事件信息数据库,包括:基于事件数据的事件维度确定事件信息数据库中的数据分片列表;基于匹配结果将事件数据记录于数据分片列表中,每个数据分片列表对应有用于处理该数据分片的实例。
具体地,事件数据有多个事件维度信息,例如,事件数据的用户ID可以为一个事件维度,根据任意事件维度将事件信息数据库中事件数据分割为不同的数据分片,每个数据分片列表对应有用于处理该数据分片的实例,每个实例是分布式流式处理应用中任务执行时所申请资源的最小单元,同一个数据分片中,可以包含多个调度时间下的事件数据,不同数据分片也可以包含相同调度时间的事件数据。例如,数据分片1中包含调度时间为10点的A事件、B事件、调度时间为11点的C事件、调度时间为9点的D事件、E事件、F事件;数据分片1由实例1来处理。数据分片2中包含调度时间为11点的G事件、调度时间为1点的H事件、J事件,调度时间为6点的I事件、K事件;数据分片1由实例2来处理。
采用根据并行度设定TASKMANAGER个数并分配好SLOT序号,以及每个SLOT序号对应处理的数据分片,不同的TASKMANAGER处理不同的数据分片任务,实现SLOT管理分配的模块,提高了处理性能,有效地保障在扩缩容的场景下,数据正常处理不丢失,保证数据的准确性和时效性。
在本申请中,分布式流处理应用在启动时,会根据设置的任务并行度参数,来分配可并行执行的多个实例,会根据应用启动日志表获取上一次分布式流处理应用启动的信息,根据应用上一次启动的信息来查询SLOT注册表获取SLOT信息列表,但若当前实例数少于或者大于SLOT信息列表中的实例数,需要对分布式流处理应用的多个实例进行扩容或缩容时,将多个实例对应的数据分片列表的记录分配至扩容或缩容后的实例对应的数据分片列表中。
如图5所示,为本申请提供的一种对分布式流处理应用的多个实例进行扩容或缩容的示例图,应用设置并行度为4,则启动后有4个TASKMANAGER,分别对应SLOT号为1、2、3、4,处理的数据分片是1、2、3、4。当应用缩容,任务并行度参数为2,则启动后有2个TASKMANAGER,通过取模方式,将原本SLOT1和SLOT3处理的数据映射到SLOT1去处理,SLOT2和SLOT4处理的数据映射到SLOT2去处理,其中SLOT号为1的TASKMANAGER需要处理分片为1和3的数据,SLOT号为2的TASKMANAGER需要处理分片为2和4的数据。由4个SLOT实例扩充到6个,每个SLOT实例的调度任务处理对应SLOT_NO号的数据,并发送给下游。
在本申请中分布式流处理应用支持根据任务并行度参数实时分配SLOT的个数,即存在对执行任务的SLOT进行缩容和扩容的场景。在SLOT进行缩容、扩容的过程后,也保证数据的准确性和时序性。
将在事件窗口内未得到匹配事件的记录生成断点事件,包括:确定在分布式流处理应用中的执行调度表中不存在调度时间;基于数据分片列表中的实例序号查询调度序号表,得到数据分片列表对应的执行调度表,调度序号表位于事件信息数据库中,用于记录任一调度时间下对应事件数据的序号;执行调度表位于分布式流处理应用中,用于记录分布式流处理应用对断点事件进行调度的调度信息;基于数据分片列表、调度序号表和执行调度表生成断点事件。
具体地,在本申请中一个TASKMANAGER对应一个SLOT号和多个数据分片,每个数据分片里面包含多条事件数据,因此采用调度序号表记录任一调度时间下对应事件数据的序号,存放在事件信息数据库中;另外采用位于分布式流处理应用中添加执行调度表,用于记录分布式流处理应用对断点事件进行调度的调度信息,和当前处理到事件的调度时间即调度时间,这样可以避免频繁从调度序号表中获取调度进度,进而影响分布式流处理应用的处理速度。确定在分布式流处理应用中的执行调度表中不存在调度时间,则说明分布式流处理应用可能发生过重启或者首次处理调度任务,TASKMANAGER会根据已分配的SLOT号去事件信息数据库中查询调度表信息,调度表和本地缓存的调度时间为空,调度表则为空,需要新插入初始化数据到执行调度表中,这些初始化数据包括SLOT号、调度时间记为当前时间、当前处理序号为0、当前处理循环次数为0。
判断执行调度表不为空;确定执行调度表中的最小调度时间和最大调度时间;基于事件数据记录的序号确定最小调度时间对应的记录是否触发断点事件,直至处理完最大调度时间对应的记录。
具体地,若确定在分布式流处理应用中的执行调度表中不存在调度时间且,判断执行调度表不为空,即分布式流处理应用发生宕机后进行了重启,则需要根据执行调度表中的调度时间进行排序,得到最小调度时间和最大调度时间。当前调度时间小于最大调度时间的情况下,对小于最大调度时间的TASKMANAGER分配的数据分片列表进行处理,即从数据库取出对应数据分片的事件数据进行处理,涉及序号和循环次数计算,处理并加入缓存,更新分布式流处理应用缓存中执行调度表的处理结果再进行循环判断,直到调度时间大于等于最大调度时间为止,追平最大时间,退出循环。
举例来说,应用重启,获取执行调度表中调度时间有8、9、10点,最小调度时间为8点,最大调度时间为10点,则当前调度时间需要从8点和9点开始,直到追平到最大调度时间10点为止。调度任务扫描到调度时间为8点和9点的断点事件数据,查询调度序号表,得到8点和9点最大序号为1,循环次数,查询对应的事件数据并进行处理,处理后序号、循环次数和调度时间自增记录到调度序号表,同时将这份数据放入缓存中的执行调度表中,再次判断调度时间是否到达10点,若调度时间没有到达10点,则继续对小于10点调度时间对应的数据进行处理,直至处理完最大调度时间对应的记录。若已到达则退出循环。
如图6所示,为本申请提供的分布式流处理应用发起调度任务对断点事件进行处理的流程图,具体包括以下步骤:
步骤S601,分布式流处理应用发起调度任务;
步骤S602,分布式流处理应用开始调度线程;
步骤S603,构造缓存key;
步骤S604,获取本地缓存的当前调度时间;
具体地,若在本地缓存中的执行调度表中不存在当前调度时间,则说明分布式流处理应用重启或者首次启动,则进行步骤S605;若在本地缓存中的执行调度表中存在当前调度时间,则说明分布式流处理应用正常调度,则进行步骤S606;
步骤S605,根据SLOT列表查询调度执行表,获取当前调度的情况,若调度执行表为空,则执行步骤S609;若调度执行表不为空,则执行步骤S610;
具体地,根据SLOT列表中的每个SLOT的序号,查询调度执行表,获取当前对断点事件的调度情况。
步骤S606,从缓存中的执行调度表中获取当前调度时间;
具体地,缓存中的执行调度表中记录每个SLOT对应的处理记录,即当前时间下,每个SLOT对断点事件处理进度及时间;
步骤S607,调度时间是否小于当前时间;
具体地,判断当前SLOT对断点事件调度时间是否小于当前时间,若是则执行步骤S608,否则执行步骤S618。
步骤S608,全量处理SLOT里的事件数据,调度时间自增;
具体地,由于当前SLOT对断点事件调度时间小于当前时间,则每个SLOT继续处理事件数据,且处理完后调度时间自增,更新至执行调度表中。
步骤S609,在调度执行表中新插入初始化的数据,并执行步骤S611;
具体地,由于调度执行表为空,则说明分布式流处理应用首次启动,TASKMANAGER会根据已分配的SLOT号查询调度序号表,获取初始化数据,并将初始化数据记载在调度执行表中,如SLOT号、调度时间记录为当前时间、当前处理序号为0、当前处理循环次数为0。
步骤S610,根据调度执行表中的调度时间进行排序,得到最小调度时间和最大调度时间;
具体地,若确定在分布式流处理应用中的执行调度表中不存在调度时间且,判断执行调度表不为空,即分布式流处理应用发生宕机后进行了重启,则需要根据执行调度表中的调度时间进行排序,得到最小调度时间和最大调度时间。
步骤S611,处理每个SLOT里的事件数据,调度时间自增;
具体地,每个SLOT继续处理事件数据,且处理完后调度时间自增,更新至执行调度表中。
步骤S612,判断当前调度时间小于等于最大调度时间;是则进行步骤S613;否则进入步骤S616;
步骤S613,将对小于最大调度时间的SLOT中的事件数据进行处理,不涉及循环次数和数据序号的计算,直至将调度时间追平至最大调度时间;
具体地,当前调度时间小于最大调度时间的情况下,对小于最大调度时间的TASKMANAGER分配的数据分片列表进行处理,即从数据库取出对应数据分片的事件数据进行处理,涉及序号和循环次数计算,处理并加入缓存,更新分布式流处理应用缓存中执行调度表的处理结果再进行循环判断,直到调度时间大于等于最大调度时间为止,追平最大时间。
步骤S614,将对等于当前时间的SLOT中的事件数据进行处理,涉及循环次数和数据序号的计算;
步骤S615,更新处理结果,调度时间自增;
步骤S616,调度时间是否小于当前时间,是则进行步骤S617;否则,进行步骤S618;
步骤S617,全量处理SLOT中的数据,调度时间自增;
步骤S618,将全量SLOT进行休眠,休眠时间为当前时间与调度时间之间的差值。
具体地,由于调度时间大于等于当前时间,则将全量SLOT进行休眠,休眠时间为当前时间与调度时间之间的差值,当当前时间小于调度时间时,重新走获取本地缓存,即步骤S604。
在本申请中,事件匹配规则是通过用户设置得到的;事件匹配规则包括一对一匹配规则、一对多匹配规则、多对一匹配规则及嵌套匹配规则;一对一匹配规则为一个开始事件对应一个结束事件;一对多匹配规则为一个开始事件对应多个结束事件;多对一匹配规则为多个开始事件对应一个结束事件;嵌套匹配规则为开始事件由另一开始事件和结束事件组成,或结束事件由另一开始事件和结束事件组成。
在本申请实施例中的事件匹配规则支持用户灵活进行设置,事件匹配规则的第一种实施方式为:一对一匹配规则,即一个开始事件对应一个结束事件,还有一个时间窗口,时间窗口为用户根据实际应用场景进行设置的,例如,开始事件为点击事件,结束事件为借款事件,时间窗口设置为12小时,即在用户发生点击事件之后,若在12小时之内,用户发生了借款事件,则该点击事件和结束事件满足该匹配规则。
第二种实施方式为:一对多匹配规则,即一个开始事件对应多个结束事件,其中每个匹配规则设置的多个时间窗口可以相同也可以不同。例如,开始事件都为点击事件,对应的结束事件1可以为开户事件、结束事件2可以为借款事件、结束事件3可以为还款事件。
第三种实施方式为:多对一匹配规则,即多个开始事件对应一个结束事件,其中每个匹配规则设置的多个时间窗口可以相同也可以不同。例如,结束事件都为还款事件,对应的开始事件1可以为点击事件、开始事件2可以为开户事件、开始事件3可以为借款事件。
第四种实施方式为:嵌套匹配规则,即开始事件由另一开始事件和结束事件组成,或者结束事件由另一开始事件和结束事件组成。例如,点击作为开始事件、开户作为结束事件,窗口期为1小时形成匹配事件A(即点击1小时内开户)。此时将匹配事件A(点击1小时内开户)作为开始事件,借款作为结束事件,窗口期为24小时形成匹配事件B(即点击1小时内开户、开户后24小时内借款)。如果窗口期为24小时内没有借款发生,那么构成的断点事件C为(点击1小时内开户、开户后24小时内未借款)。结束事件由另一开始事件和结束事件组成,同理开始事件的组成过程,在此不做详细赘述。
通过制定复杂事件的匹配规则,支持复杂规则嵌套,可以将匹配事件和断点事件结合在一起嵌套使用,即可以将匹配事件进行组合形成新的开始事件,这样可以生成新的匹配事件和断点事件,以支持多种事件规则的复杂场景。由于存在一条事件数据可以支持多个匹配规则,在存储匹配规则时,减少了匹配规则数据的存储量,不需要根据不同的场景来进行不同匹配规则的储存。
第二方面,本申请实施例提供了一种复杂事件处理装置,该装置的结构示意图,如图7所示,该装置700包括:
获取模块701,用于获取上游系统上报的事件数据;
处理模块702,用于针对任一事件数据,基于事件匹配规则确定事件信息数据库中是否存在所述事件数据的匹配事件,并基于匹配结果将所述事件数据记录于所述事件信息数据库;所述事件信息数据库为多个上游系统共用;
所述处理模块702,还用于针对所述事件信息数据库中的任一记录,将在事件窗口内未得到匹配事件的记录生成断点事件,并将所述断点事件对应的断点消息发送至下游系统。
通过事件信息数据库实现对复杂事件进行存储和处理,实现了多机房部署的场景,避免数据量过大或者窗口期时间设定过大而造成分布式流处理应用出现宕机,进而造成数据丢失或内存溢出的问题。另外在分布式流处理应用发起调度任务之前,已根据匹配规则完成对事件数据的匹配,提高了后续调度任务对断点事件处理的时效性。
可选地,所述处理模块702具体用于:
确定所述事件数据的事件类型;
若所述事件类型为开始事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的结束事件;
若所述事件类型为结束事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的开始事件。
可选地,所述处理模块702具体用于:
若存在所述事件数据的匹配事件,则将所述匹配事件对应的匹配类型标识、所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库;所述事件数据具有至少一个匹配事件;任一调度时间为事件上报时间与事件窗口之和;
若不存在所述事件数据的匹配事件,则将所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库。
可选地,所述处理模块702具体用于:
通过调度任务,将在事件窗口内未得到匹配事件的记录生成断点事件;所述调度任务是通过所述分布式流处理应用中的实例完成的;所述分布式流处理应用通过任务并行度参数设置可并行执行的多个实例。
可选地,所述处理模块702具体用于:
基于所述事件数据的事件维度确定所述事件信息数据库中的数据分片列表;
基于匹配结果将所述事件数据记录于所述数据分片列表中,每个数据分片列表对应有用于处理该数据分片的实例。
可选地,所述处理模块702具体用于:
在所述分布式流处理应用的多个实例进行扩容或缩容时,将所述多个实例对应的数据分片列表的记录分配至扩容或缩容后的实例对应的数据分片列表中。
可选地,所述处理模块702具体用于:
确定在所述分布式流处理应用中的执行调度表中不存在调度时间;
基于所述数据分片列表中的实例序号查询调度序号表,得到所述数据分片列表对应的执行调度表,所述调度序号表位于所述事件信息数据库中,用于记录任一调度时间下对应事件数据的序号;所述执行调度表位于所述分布式流处理应用中,用于记录所述分布式流处理应用对所述断点事件进行调度的调度信息;
基于所述数据分片列表、所述调度序号表和所述执行调度表生成断点事件。
可选地,所述处理模块702具体用于:
判断所述执行调度表不为空;
确定所述执行调度表中的最小调度时间和最大调度时间;
基于所述事件数据记录的序号确定最小调度时间对应的记录是否触发断点事件,直至处理完最大调度时间对应的记录。
可选地,所述处理模块702具体用于:
所述事件匹配规则包括一对一匹配规则、一对多匹配规则、多对一匹配规则及嵌套匹配规则;
所述一对一匹配规则为一个开始事件对应一个结束事件;
所述一对多匹配规则为一个开始事件对应多个结束事件;
所述多对一匹配规则为多个开始事件对应一个结束事件;
所述嵌套匹配规则为开始事件由另一开始事件和结束事件组成,或结束事件由另一开始事件和结束事件组成。
通过制定复杂事件的匹配规则,支持复杂规则嵌套,可以将匹配事件和断点事件结合在一起嵌套使用,即可以将匹配事件进行组合形成新的开始事件,这样可以生成新的匹配事件和断点事件,以支持多种事件规则的复杂场景。由于存在一条事件数据可以支持多个匹配规则,在存储匹配规则时,减少了匹配规则数据的存储量,不需要根据不同的场景来进行不同匹配规则的储存。
基于相同的技术构思,本申请实施例提供了一种计算机设备,如图8所示,包括至少一个处理器801,以及与至少一个处理器连接的存储器802,本申请实施例中不限定处理器801与存储器802之间的具体连接介质,图8中处理器801和存储器802之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。
在本申请实施例中,存储器802存储有可被至少一个处理器801执行的指令,至少一个处理器801通过执行存储器802存储的指令,可以执行上述复杂事件处理的方法的步骤。
其中,处理器801是计算机设备的控制中心,可以利用各种接口和线路连接计算机设备的各个部分,通过运行或执行存储在存储器802内的指令以及调用存储在存储器802内的数据,从而实现对复杂事件进行处理。可选的,处理器801可包括一个或多个处理单元,处理器801可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器801中。在一些实施例中,处理器801和存储器802可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器801可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器802作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器802可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器802是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机设备存取的任何其他介质,但不限于此。本申请实施例中的存储器802还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
基于同一发明构思,本申请实施例提供了一种计算机可读存储介质,其存储有可由计算机设备执行的计算机程序,当程序在计算机设备上运行时,使得计算机设备执行上述复杂事件处理的方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (12)
1.一种复杂事件处理方法,应用于分布式流处理应用,其特征在于,包括:
获取上游系统上报的事件数据;
针对任一事件数据,基于事件匹配规则确定事件信息数据库中是否存在所述事件数据的匹配事件,并基于匹配结果将所述事件数据记录于所述事件信息数据库;所述事件信息数据库为多个上游系统共用;
针对所述事件信息数据库中的任一记录,将在事件窗口内未得到匹配事件的记录生成断点事件,并将所述断点事件对应的断点消息发送至下游系统。
2.如权利要求1所述的方法,其特征在于,所述基于事件匹配规则确定事件信息数据库中是否存在所述事件数据的匹配事件,包括:
确定所述事件数据的事件类型;
若所述事件类型为开始事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的结束事件;
若所述事件类型为结束事件,则基于事件匹配规则确定事件信息数据库中是否存在与所述事件数据匹配的开始事件。
3.如权利要求1所述的方法,其特征在于,所述基于匹配结果将所述事件数据记录于所述事件信息数据库,包括:
若存在所述事件数据的匹配事件,则将所述匹配事件对应的匹配类型标识、所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库;所述事件数据具有至少一个匹配事件;任一调度时间为事件上报时间与事件窗口之和;
若不存在所述事件数据的匹配事件,则将所述事件数据的调度时间及所述事件数据记录于所述事件信息数据库。
4.如权利要求1所述的方法,其特征在于,所述将在事件窗口内未得到匹配事件的记录生成断点事件,包括:
通过调度任务,将在事件窗口内未得到匹配事件的记录生成断点事件;所述调度任务是通过所述分布式流处理应用中的实例完成的;所述分布式流处理应用通过任务并行度参数设置可并行执行的多个实例。
5.如权利要求4所述的方法,其特征在于,所述基于匹配结果将所述事件数据记录于所述事件信息数据库,包括:
基于所述事件数据的事件维度确定所述事件信息数据库中的数据分片列表;
基于匹配结果将所述事件数据记录于所述数据分片列表中,每个数据分片列表对应有用于处理该数据分片的实例。
6.如权利要求5所述的方法,其特征在于,还包括:
在所述分布式流处理应用的多个实例进行扩容或缩容时,将所述多个实例对应的数据分片列表的记录分配至扩容或缩容后的实例对应的数据分片列表中。
7.如权利要求5所述的方法,其特征在于,所述将在事件窗口内未得到匹配事件的记录生成断点事件,包括:
确定在所述分布式流处理应用中的执行调度表中不存在调度时间;
基于所述数据分片列表中的实例序号查询调度序号表,得到所述数据分片列表对应的执行调度表,所述调度序号表位于所述事件信息数据库中,用于记录任一调度时间下对应事件数据的序号;所述执行调度表位于所述分布式流处理应用中,用于记录所述分布式流处理应用对所述断点事件进行调度的调度信息;
基于所述数据分片列表、所述调度序号表和所述执行调度表生成断点事件。
8.如权利要求7所述的方法,其特征在于,还包括:
判断所述执行调度表不为空;
确定所述执行调度表中的最小调度时间和最大调度时间;
基于所述事件数据记录的序号确定最小调度时间对应的记录是否触发断点事件,直至处理完最大调度时间对应的记录。
9.如权利要求1至8任一所述的方法,其特征在于,所述事件匹配规则是通过用户设置得到的;
所述事件匹配规则包括一对一匹配规则、一对多匹配规则、多对一匹配规则及嵌套匹配规则;
所述一对一匹配规则为一个开始事件对应一个结束事件;
所述一对多匹配规则为一个开始事件对应多个结束事件;
所述多对一匹配规则为多个开始事件对应一个结束事件;
所述嵌套匹配规则为开始事件由另一开始事件和结束事件组成,或结束事件由另一开始事件和结束事件组成。
10.一种复杂事件处理装置,其特征在于,包括:
获取模块,用于获取上游系统上报的事件数据;
处理模块,用于针对任一事件数据,基于事件匹配规则确定事件信息数据库中是否存在所述事件数据的匹配事件,并基于匹配结果将所述事件数据记录于所述事件信息数据库;所述事件信息数据库为多个上游系统共用;
所述处理模块,还用于针对所述事件信息数据库中的任一记录,将在事件窗口内未得到匹配事件的记录生成断点事件,并将所述断点事件对应的断点消息发送至下游系统。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1~9任一所述的方法的步骤。
12.一种计算机可读存储介质,其特征在于,其存储有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行权利要求1~9任一所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311234738.XA CN117235134A (zh) | 2023-09-21 | 2023-09-21 | 一种复杂事件处理的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311234738.XA CN117235134A (zh) | 2023-09-21 | 2023-09-21 | 一种复杂事件处理的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117235134A true CN117235134A (zh) | 2023-12-15 |
Family
ID=89096429
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311234738.XA Pending CN117235134A (zh) | 2023-09-21 | 2023-09-21 | 一种复杂事件处理的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117235134A (zh) |
-
2023
- 2023-09-21 CN CN202311234738.XA patent/CN117235134A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109324890B (zh) | 资源管理方法、装置及计算机可读存储介质 | |
CN111722918A (zh) | 业务标识码生成方法、装置、存储介质及电子设备 | |
US20140059000A1 (en) | Computer system and parallel distributed processing method | |
CN110609924A (zh) | 基于图数据的全量关系计算方法、装置、设备及存储介质 | |
CN110569315B (zh) | 基于数据仓库的数据处理方法和装置 | |
CN117235134A (zh) | 一种复杂事件处理的方法及装置 | |
CN112434056A (zh) | 一种详情数据的查询方法及装置 | |
CN111988429A (zh) | 算法调度方法以及系统 | |
CN109327499B (zh) | 业务接口的管理方法及装置、存储介质、终端 | |
US11881996B2 (en) | Input and output for target device communication | |
CN116881003A (zh) | 资源分配方法、装置、服务设备及存储介质 | |
KR101744017B1 (ko) | 실시간 검색을 위한 데이터 인덱싱 방법 및 장치 | |
CN110929207B (zh) | 数据处理方法、装置和计算机可读存储介质 | |
CN112818007B (zh) | 数据处理方法、装置及可读存储介质 | |
CN114064712A (zh) | 数据访问方法、装置、电子设备及计算机可读存储介质 | |
CN110083438B (zh) | 事务分发方法、装置、设备和存储介质 | |
CN112927004A (zh) | 用于大数据画像的信息云计算分析方法及信息推送服务器 | |
CN111143326A (zh) | 减少数据库操作的方法、装置、计算机设备及存储介质 | |
CN111080250A (zh) | 流程回退补偿方法、装置、存储介质及电子设备 | |
CN114168275B (zh) | 任务调度方法、系统、终端设备及存储介质 | |
CN114756382B (zh) | 一种内存页面合并的优化方法、系统及服务器 | |
US11281494B2 (en) | Business operation method, apparatus, and system for determining and executing operation tasks in cloud computing | |
CN113064720B (zh) | 对象分配方法、装置、服务器及存储介质 | |
CN117435432B (zh) | 分布式指标采集方法、组件、系统 | |
US11689432B1 (en) | Feedback prioritization system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |