CN114116266B - 一种基于流计算自动化拆分消息的方法及系统 - Google Patents
一种基于流计算自动化拆分消息的方法及系统 Download PDFInfo
- Publication number
- CN114116266B CN114116266B CN202210097067.6A CN202210097067A CN114116266B CN 114116266 B CN114116266 B CN 114116266B CN 202210097067 A CN202210097067 A CN 202210097067A CN 114116266 B CN114116266 B CN 114116266B
- Authority
- CN
- China
- Prior art keywords
- data
- rule
- source
- processed
- piece
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000014509 gene expression Effects 0.000 claims abstract description 33
- 238000012545 processing Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 8
- 230000006399 behavior Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种基于流计算自动化拆分消息的方法,包括:在Apache Flink拆分引擎中,根据mvel表达式判断每条数据符合哪一个分流规则,可以拆分到哪一个topic队列中去,就将一个QPS很高的源topic,分流到多个不同的topic队列中去,从而完成自动化拆分消息的功能。本发明实施例还公开了一种基于流计算自动化拆分消息的系统。本发明解决了消费无效数据,集群负载很高的问题,使消费者直接读取拆分后的topic,而不是读取本消息队列,降低了集群的负载;下游程序无需要读取大量无效数据,可以降低下游处理程序使用的资源;并且用户可以根据需求配置拆分规则,灵活性强,扩展性好。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种基于流计算自动化拆分消息的方法及系统。
背景技术
随着互联网技术的发展,越来越多的终端得以接入,万物互联的时代到来,终端设备采集的日志量越来越多,对数据处理的时效性越来越强,一些场景下需要毫秒级的数据延迟,因此需要提高系统吞吐量和减少数据处理量。
现有技术中,一些采集系统会使用flume、kafka等组件将数据集中采集到某一个topic中,比如用户行为日志,包含了许多的不同用户行为,而大部分的后续业务只关心某一个或者某几个具体的用户行为,但是需要读取整个topic中的所有数据,造成资源的浪费,处理效率的降低。
发明内容
本发明的目的在于提供一种基于流计算自动化拆分消息的方法及系统,使消费者直接读取拆分后的topic,而不是读取本消息队列,降低了集群的负载;下游程序无需要读取大量无效数据,可以降低下游处理程序使用的资源;并且用户可以根据需求配置拆分规则,灵活性强,扩展性好。
本发明提供了一种基于流计算自动化拆分消息的方法,所述方法包括:
根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,其中,所述mvel规则包括多个分流规则以及根据所述多个分流规则生成的mvel表达式;
第一数据源读取所述mvel规则,并将所述mvel规则广播至map字典;
第二数据源读取所述源kafka地址和所述源topic,以获取所述待处理数据;
连接所述第一数据源和所述第二数据源,获取所述待处理数据和所述mvel规则;
根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列;
将所述待处理数据的每条数据分流至对应的目标topic队列中。
作为本发明进一步的改进,所述根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,包括:
在Apache Flink拆分引擎的Jobmanager处理程序中,根据所述待处理数据的源kafka地址和源topic,使用http请求定期从规则配置后台中请求与所述源kafka地址和所述源topic对应的多个分流规则;
所述规则配置后台接收到所述http请求后,所述规则配置后台中的规则配置引擎根据所述http请求读取并写入所述源kafka地址和所述源topic,生成所述多个分流规则以及所述mvel表达式;
通过http接口将所述多个分流规则以及所述mvel表达式传输给所述Jobmanager处理程序。
作为本发明进一步的改进,所述第一数据源是在Apache Flink拆分引擎的Jobmanager处理程序中自定义的数据源source1;
所述第二数据源是在所述Apache Flink拆分引擎的Taskmanager处理程序中自定义的数据源source2。
作为本发明进一步的改进,所述map字典通过在Apache Flink拆分引擎的Taskmanager处理程序中定义得到,
所述方法还包括:定期更新存储于所述map字典中的规则,包括:
将广播规则存储在所述map字典中,其中,所述广播规则是所述第一数据源广播来的规则;
判断所述map字典中是否包含所述广播规则,当没有包含时,将所述map字典清空,并将所述广播规则存储在所述map字典中;当包含时,无需更新。
作为本发明进一步的改进,所述根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列,包括:
根据所述mvel表达式,从所述多个分流规则中确定所述待处理数据的每条数据匹配的分流规则,基于每条数据匹配的分流规则确定每条数据的目标topic队列,并将每条数据和所述每条数据匹配的分流规则发送到目的kafka;
Apache Flink拆分引擎自定义至少一个producer,以分别存储所述待处理数据中的每条数据;
所述至少一个producer将每条数据分别写入所述目的kafka中的每个目标topic队列中。
本发明实施例还提供了一种基于流计算自动化拆分消息的系统,所述系统包括:
规则配置后台,用于提供http接口,配置分流规则;
Apache Flink拆分引擎,用于根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,其中,所述mvel规则包括多个分流规则以及根据所述多个分流规则生成的mvel表达式;通过第一数据源读取并写入所述mvel规则,并将所述mvel规则广播至map字典;通过第二数据源读取并写入所述源kafka地址和所述源topic,以获取所述待处理数据;
连接所述第一数据源和所述第二数据源,获取所述待处理数据和所述mvel规则;
根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列;
将所述待处理数据的每条数据分流至所述对应的目标topic队列中。
作为本发明进一步的改进,所述根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,包括:
在Apache Flink拆分引擎的Jobmanager处理程序中,根据所述待处理数据的源kafka地址和源topic,使用http请求定期从规则配置后台中请求与所述源kafka地址和所述源topic对应的多个分流规则;
所述规则配置后台接收到所述http请求后,所述规则配置后台中的规则配置引擎根据所述http请求读取并写入所述源kafka地址和所述源topic,生成所述多个分流规则以及所述mvel表达式;
通过http接口将所述多个分流规则以及所述mvel表达式传输给所述Jobmanager处理程序。
作为本发明进一步的改进,所述第一数据源是在所述Apache Flink拆分引擎的Jobmanager处理程序中自定义的数据源source1;
所述第二数据源是在所述Apache Flink拆分引擎的Taskmanager处理程序中自定义的数据源source2。
作为本发明进一步的改进,所述map字典通过在所述Apache Flink拆分引擎的Taskmanager处理程序中定义得到,所述待处理数据中每条数据定义一个所述map字典,
所述Apache Flink拆分引擎还用于:定期更新存储于所述map字典中的规则,包括:
将广播规则存储在所述map字典中,其中,所述广播规则是所述第一数据源广播来的规则;
判断所述map字典中是否包含所述广播规则,当没有包含时,将所述map字典清空,并将所述广播规则存储在所述map字典中;当包含时,无需更新。
作为本发明进一步的改进,所述根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列,包括:
根据所述mvel表达式,从所述多个分流规则中确定所述待处理数据的每条数据匹配的分流规则,基于每条数据匹配的分流规则确定每条数据的目标topic队列,并将每条数据和所述每条数据匹配的分流规则发送到目的kafka;
Apache Flink拆分引擎自定义至少一个producer,以分别存储所述待处理数据中的每条数据;
所述至少一个producer将每条数据分别写入所述目的kafka中的每个目标topic队列中。
本发明的有益效果为:消费者读取拆分后的topic,而不是读取本消息队列中的源topic,降低了集群的负载;下游程序无需要读取大量无效数据,可以降低下游处理程序使用的资源;并且用户可以根据需求配置拆分规则,灵活性强,扩展性好。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一示例性实施例所述的一种基于流计算自动化拆分消息的方法的数据处理流程示意图;
图2为本发明一示例性实施例所述的一种基于流计算自动化拆分消息的方法的整体流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
另外,在本发明的描述中,所用术语仅用于说明目的,并非旨在限制本发明的范围。术语“包括”和/或“包含”用于指定所述元件、步骤、操作和/或组件的存在,但并不排除存在或添加一个或多个其他元件、步骤、操作和/或组件的情况。术语“第一”、“第二”等可能用于描述各种元件,不代表顺序,且不对这些元件起限定作用。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个及两个以上。这些术语仅用于区分一个元素和另一个元素。结合以下附图,这些和/或其他方面变得显而易见,并且,本领域普通技术人员更容易理解关于本发明所述实施例的说明。附图仅出于说明的目的用来描绘本发明所述实施例。本领域技术人员将很容易地从以下说明中认识到,在不背离本发明所述原理的情况下,可以采用本发明所示结构和方法的替代实施例。
如图1-2所示,本发明实施例所述的一种基于流计算自动化拆分消息的方法,所述方法包括:
根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,其中,所述mvel规则包括多个分流规则以及根据所述多个分流规则生成的mvel表达式;
第一数据源读取所述mvel规则,并将所述mvel规则广播至map字典;
第二数据源读取所述源kafka地址和所述源topic,以获取所述待处理数据;
连接所述第一数据源和所述第二数据源,获取所述待处理数据和所述mvel规则;
根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列;
将所述待处理数据的每条数据分流至对应的目标topic队列中。
本发明所述的方法在Apache Flink拆分引擎中,根据mvel表达式判断每条数据符合哪一个分流规则,以确定该条数据可以拆分到哪一个topic队列中去,从而将一个QPS 很高的源topic,分流到多个不同的topic队列中去,完成消息的自动化拆分。以使消费者读取拆分后的topic,而不是读取本消息队列中的源topic,大大降低了集群的负载。
如图1所示,flink处理程序(即Apache Flink拆分引擎)从规则配置后台的规则配置引擎根据待处理数据的源kafka地址和源topic,获取mvel规则(即根据待处理数据而生成的多个分流规则和根据多个分流规则生成的mvel表达式),每个分流规则中预先设定了匹配该分流规则的每条数据分流的目标topic队列,topic拆分引擎(即Apache Flink拆分引擎中的Taskmanager处理程序)内部定义两个数据源(即第一数据源和第二数据源),第一数据源读取mvel规则并将mvel规则广播出去,第二数据源读取待处理数据,将第一数据源与第二数据源进行connect,获取所述待处理数据和所述mvel规则,将接收到的广播规则存储在map字典(该map字典以键值对(key-value)的形式存储数据)中,根据map字典中的规则,分别确定待处理数据中每条数据对应的分流规则以及目标topic队列,将待处理数据的每条数据分流至目的kafka中对应的目标topic队列(topic1,topic2,topic3,……)中。
本发明所述方法是基于Apache Flink处理框架的并行处理,每一个TaskManager的功能是一样的,在任务扩容或缩容时只需要增加或减少并行度和TaskManager即可,所有TaskManager一起处理输入的数据,每个分流规则都是依赖mvel表达式来判断每条数据属于哪个类别,mvel表达式支持自定义,并且本发明所述方法的多个分流规则是动态获取的,规则的增删改查会实时更新到TaskManager处理程序中,能够实时应用,无需重启整个Apache Flink引擎;解决了消费无效数据,集群负载高的问题;而本发明所述的方法使消费者直接读取拆分后的topic,而不是读取本消息队列,降低了集群的负载;下游程序无需要读取大量无效数据,可以降低下游处理程序使用的资源;并且用户可以根据需求配置拆分规则,灵活性强,扩展性好。
一种可选的实施方式,所述根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,包括:
在Apache Flink拆分引擎的Jobmanager处理程序中,根据所述待处理数据的源kafka地址和源topic,使用http请求定期从规则配置后台中请求与所述源kafka地址和所述源topic对应的多个分流规则;
所述规则配置后台接收到所述http请求后,所述规则配置后台中的规则配置引擎根据所述http请求读取并写入所述源kafka地址和所述源topic,生成所述多个分流规则以及所述mvel表达式;
通过http接口将所述多个分流规则以及所述mvel表达式传输给所述Jobmanager处理程序。
本发明所述的方法的核心是基于Apache Flink的并行处理,Apache Flink是一个开源的分布式流式处理框架,包括主进程(即Jobmanager)用来部署任务,还包括Taskmanager,从Jobmanager处接收需要部署的任务(即Task),每一个TaskManager的功能是一样的,在任务扩容或缩容是只需要增加或减少并行度和TaskManager即可。
在Apache Flink拆分引擎的Jobmanager处理程序中,根据待处理数据中的源kafka地址和源topic,使用http请求,去向规则配置后台请求与源kafka地址和源topic对应的分流规则,定时请求一次,规则配置后台提供了可以编辑的页面,方便用户增删改查相应的分流规则以及定时期限(例如每1分钟发出一次http请求)等,将请求到的分流规则广播到Taskmanager中,这样就相当于定时(例如每1分钟)更新一次分流规则。
如图1所示,接收到所述topic拆分引擎发出的请求后,规则配置后台中会根据http请求配置相应的分流规则,规则配置后台中的规则配置引擎读取并写入kafka地址或topic(即源kafka地址或源topic),最终根据写入的kafka地址或topic配置出相应的分流规则,以及根据分流规则生成的mvel表达式。
一种可选的实施方式,所述第一数据源是在Apache Flink拆分引擎的Jobmanager处理程序中自定义的数据源source1;
所述第二数据源是在所述Apache Flink拆分引擎的Taskmanager处理程序中自定义的数据源source2。
本发明所述方法通过使用Apache Flink计算框架开发了一个Apache Flink拆分引擎,采用自定义数据源的方式,自定义了两个数据源(即source1、source2),一个数据源(即source1)读取规则配置信息,一个数据源(即source2)读取要拆分的topic(即所述源kafka地址和所述源topic)中的数据;
在Apache Flink的TaskManager中,source2去消费需要拆分的topic(即所述源kafka地址和所述源topic);然后要分流的topic和广播的分流规则的source进行connect(即source1和source2连接),Apache Flink中的connect算子可以连接两个保持他们类型的数据流,两个数据流被connect之后,只是被放在了一个同一个流中,内部依然保持各自的数据和形式不发生任何变化,两个流相互独立。获得了要处理的每条数据和每条分流规则;
一种可选的实施方式,所述map字典通过在Apache Flink拆分引擎的Taskmanager处理程序中定义得到,
所述方法还包括:定期更新存储于所述map字典中的规则,包括:
将广播规则存储在所述map字典中,其中,所述广播规则是所述第一数据源广播来的规则;
判断所述map字典中是否包含所述广播规则,当没有包含时,将所述map字典清空,并将所述广播规则存储在所述map字典中;当包含时,无需更新。
本发明所述一种基于流计算自动化拆分消息的方法,在Taskmanager处理程序中的待处理数据中每条数据定义一个函数,在函数中定义一个map字典,每条数据对应一个map字典。如图2所示,判断map字典是否包含广播的多个分流规则,如果该规则在map字典中存在,则说明多个分流规则没有改变,否则清空该map字典,然后将广播的多个分流规则和生成的mvel表达式对象加入到map字典中。通过广播规则的方式,解决了规则变动时,线上应用规则的同步,不需要重启规则拆分引擎,从而提供一个持续、稳定的topic拆分引擎;
一种可选的实施方式,所述根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列,包括:
根据所述mvel表达式,从所述多个分流规则中确定所述待处理数据的每条数据匹配的分流规则,基于每条数据匹配的分流规则确定每条数据的目标topic队列,并将每条数据和所述每条数据匹配的分流规则发送到目的kafka;
Apache Flink拆分引擎自定义至少一个producer,以分别存储所述待处理数据中的每条数据;
所述至少一个producer将每条数据分别写入所述目的kafka中的每个目标topic队列中。
如图2所示,本发明所述一种基于流计算自动化拆分消息的方法,根据广播规则中的mvel表达式判断每条数据符合哪一个分流规则,因为多个分流规则是一个数组,每条数据都要和map字典中多个分流规则的每个规则进行判断,对每个规则,将匹配出该规则中的目标topic队列以及对应的每条数据以组合形式(topic,数据)发送至目的kafka中,该组合形式中的topic即为目标topic队列,该目的kafka即为要写入的kafka,根据接收到的组合(topic,数据),Apache Flink拆分引擎会自定义消息中间件的生产者producer(kafka的逻辑结构为:每个topic是自定义的队列,producer向队列里放消息,消费者consumer从队列中取消息,topic之间是相互独立的。),自定义的producer将每个组合(topic,数据)中的数据取出并写入到组合中的topic中去,从而完成自动化拆分消息的功能。例如,对于一条数据a和一条数据b,根据分流规则数据a需要被拆分到topic1中,数据b需要被拆分到topic2中,将数据a和topic1以组合(topic1,a)形式,数据b和topic2以组合(topic2,b)形式发送,自定义的producer接收到组合后,将数据a从组合(topic1,a)中取出并写入到topic1中,将数据b从组合(topic2,b)中取出并写入到topic2中。
规则配置信息采用定时读取接口信息、广播到Taskmanager上的形式,进行规则的动态加载,不用每次都重启Apache Flink拆分引擎。因为分流规则的变更和新增会随着业务的改变而进行,在Apache Flink拆分引擎中,采用自定义的数据源把分流规则定时广播到每一个Taskmanager上,保证每个节点上的规则都是最新的,而不需要重启Apache Flink拆分引擎。
通过Apache Flink计算框架和mvel表达式的配合,使用户可以自定义分流规则,灵活度高,扩展性好,可以针对json格式的任意日志进行拆分处理,通用性强。
本发明公开一种基于流计算自动化拆分消息的系统,所述系统包括:
规则配置后台,用于提供http接口,配置分流规则;
Apache Flink拆分引擎,用于根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,其中,所述mvel规则包括多个分流规则以及根据所述多个分流规则生成的mvel表达式;通过第一数据源读取并写入所述mvel规则,并将所述mvel规则广播至map字典;通过第二数据源读取并写入所述源kafka地址和所述源topic,以获取所述待处理数据;
连接所述第一数据源和所述第二数据源,获取所述待处理数据和所述mvel规则;
根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列;
将所述待处理数据的每条数据分流至所述对应的目标topic队列中。
一种可选的实施方式,所述根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,包括:
在Apache Flink拆分引擎的Jobmanager处理程序中,根据所述待处理数据的源kafka地址和源topic,使用http请求定期从规则配置后台中请求与所述源kafka地址和所述源topic对应的多个分流规则;
所述规则配置后台接收到所述http请求后,所述规则配置后台中的规则配置引擎根据所述http请求读取并写入所述源kafka地址和所述源topic,生成所述多个分流规则以及所述mvel表达式;
通过http接口将所述多个分流规则以及所述mvel表达式传输给所述Jobmanager处理程序。
一种可选的实施方式,所述第一数据源是在所述Apache Flink拆分引擎的Jobmanager处理程序中自定义的数据源source1;
所述第二数据源是在所述Apache Flink拆分引擎的Taskmanager处理程序中自定义的数据源source2。
一种可选的实施方式,所述map字典通过在所述Apache Flink拆分引擎的Taskmanager处理程序中定义得到,所述待处理数据中每条数据定义一个所述map字典,
所述Apache Flink拆分引擎还用于:定期更新存储于所述map字典中的规则,包括:
将广播规则存储在所述map字典中,其中,所述广播规则是所述第一数据源广播来的规则;
判断所述map字典中是否包含所述广播规则,当没有包含时,将所述map字典清空,并将所述广播规则存储在所述map字典中;当包含时,无需更新。
一种可选的实施方式,所述根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列,包括:
根据所述mvel表达式,从所述多个分流规则中确定所述待处理数据的每条数据匹配的分流规则,基于每条数据匹配的分流规则确定每条数据的目标topic队列,并将每条数据和所述每条数据匹配的分流规则发送到目的kafka;
Apache Flink拆分引擎自定义至少一个producer,以分别存储所述待处理数据中的每条数据;
所述至少一个producer将每条数据分别写入所述目的kafka中的每个目标topic队列中。
本发明在Apache Flink拆分引擎中添加了计数器、速率计算器等,以监控信息;可以自定义监控拆分成功的条数和拆分失败的条数;可以自定义监控QPS(即每秒查询率),监控每个间隔的输入QPS,处理QPS等信息,方便监控分流引擎的运行状态,及时发现、定位问题。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未
详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
此外,本领域普通技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本领域技术人员应理解,尽管已经参考示例性实施例描述了本发明,但是在不脱离本发明的范围的情况下,可进行各种改变并可用等同物替换其元件。另外,在不脱离本发明的实质范围的情况下,可进行许多修改以使特定情况或材料适应本发明的教导。因此,本发明不限于所公开的特定实施例,而是本发明将包括落入所附权利要求范围内的所有实施例。
Claims (8)
1.一种基于流计算自动化拆分消息的方法,其特征在于,所述方法包括:
根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,其中,所述mvel规则包括多个分流规则以及根据所述多个分流规则生成的mvel表达式;
所述多个分流规则为在Apache Flink拆分引擎的Jobmanager处理程序中,使用http请求定期从规则配置后台中请求获得的与所述源kafka地址和所述源topic对应的规则;
第一数据源读取所述mvel规则,并将所述mvel规则广播至map字典,所述第一数据源是在Apache Flink拆分引擎的Jobmanager处理程序中自定义的数据源source1;
第二数据源读取所述源kafka地址和所述源topic,以获取所述待处理数据,所述第二数据源是在所述Apache Flink拆分引擎的Taskmanager处理程序中自定义的数据源source2;
连接所述第一数据源和所述第二数据源,获取所述待处理数据和所述mvel规则;
根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列;
将所述待处理数据的每条数据分流至对应的目标topic队列中。
2.如权利要求1所述的方法,其特征在于,所述根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,包括:
所述规则配置后台接收到所述http请求后,所述规则配置后台中的规则配置引擎根据所述http请求读取并写入所述源kafka地址和所述源topic,生成所述多个分流规则以及所述mvel表达式;
通过http接口将所述多个分流规则以及所述mvel表达式传输给所述Jobmanager处理程序。
3.如权利要求1所述的方法,其特征在于,所述map字典通过在Apache Flink拆分引擎的Taskmanager处理程序中定义得到,
所述方法还包括:定期更新存储于所述map字典中的规则,包括:
将广播规则存储在所述map字典中,其中,所述广播规则是所述第一数据源广播来的规则;
判断所述map字典中是否包含所述广播规则,当没有包含时,将所述map字典清空,并将所述广播规则存储在所述map字典中;当包含时,无需更新。
4.如权利要求1所述的方法,其特征在于,所述根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列,包括:
根据所述mvel表达式,从所述多个分流规则中确定所述待处理数据的每条数据匹配的分流规则,基于每条数据匹配的分流规则确定每条数据的目标topic队列,并将每条数据和所述每条数据匹配的分流规则发送到目的kafka;
Apache Flink拆分引擎自定义至少一个producer,以分别存储所述待处理数据中的每条数据;
所述至少一个producer将每条数据分别写入所述目的kafka中的每个目标topic队列中。
5.一种基于流计算自动化拆分消息的系统,其特征在于,所述系统包括:
规则配置后台,用于提供http接口,配置分流规则;
Apache Flink拆分引擎,用于根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,其中,所述mvel规则包括多个分流规则以及根据所述多个分流规则生成的mvel表达式;
所述多个分流规则为在Apache Flink拆分引擎的Jobmanager处理程序中,使用http请求定期从规则配置后台中请求获得的与所述源kafka地址和所述源topic对应的规则;
通过第一数据源读取并写入所述mvel规则,并将所述mvel规则广播至map字典,所述第一数据源是在所述Apache Flink拆分引擎的Jobmanager处理程序中自定义的数据源source1;
通过第二数据源读取并写入所述源kafka地址和所述源topic,以获取所述待处理数据,所述第二数据源是在所述Apache Flink拆分引擎的Taskmanager处理程序中自定义的数据源source2;
连接所述第一数据源和所述第二数据源,获取所述待处理数据和所述mvel规则;
根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列;
将所述待处理数据的每条数据分流至所述对应的目标topic队列中。
6.如权利要求5所述的系统,其特征在于,所述根据待处理数据的源kafka地址和源topic,获取所述待处理数据的mvel规则,包括:
所述规则配置后台接收到所述http请求后,所述规则配置后台中的规则配置引擎根据所述http请求读取并写入所述源kafka地址和所述源topic,生成所述多个分流规则以及所述mvel表达式;
通过http接口将所述多个分流规则以及所述mvel表达式传输给所述Jobmanager处理程序。
7.如权利要求5所述的系统,其特征在于,所述map字典通过在所述Apache Flink拆分引擎的Taskmanager处理程序中定义得到,所述待处理数据中每条数据定义一个所述map字典,
所述Apache Flink拆分引擎还用于:定期更新存储于所述map字典中的规则,包括:
将广播规则存储在所述map字典中,其中,所述广播规则是所述第一数据源广播来的规则;
判断所述map字典中是否包含所述广播规则,当没有包含时,将所述map字典清空,并将所述广播规则存储在所述map字典中;当包含时,无需更新。
8.如权利要求5所述的系统,其特征在于,所述根据map字典接收到的规则,分别确定所述待处理数据中每条数据对应的分流规则以及目标topic队列,包括:
根据所述mvel表达式,从所述多个分流规则中确定所述待处理数据的每条数据匹配的分流规则,基于每条数据匹配的分流规则确定每条数据的目标topic队列,并将每条数据和所述每条数据匹配的分流规则发送到目的kafka;
Apache Flink拆分引擎自定义至少一个producer,以分别存储所述待处理数据中的每条数据;
所述至少一个producer将每条数据分别写入所述目的kafka中的每个目标topic队列中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210097067.6A CN114116266B (zh) | 2022-01-27 | 2022-01-27 | 一种基于流计算自动化拆分消息的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210097067.6A CN114116266B (zh) | 2022-01-27 | 2022-01-27 | 一种基于流计算自动化拆分消息的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114116266A CN114116266A (zh) | 2022-03-01 |
CN114116266B true CN114116266B (zh) | 2022-05-17 |
Family
ID=80361260
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210097067.6A Active CN114116266B (zh) | 2022-01-27 | 2022-01-27 | 一种基于流计算自动化拆分消息的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114116266B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177193A (zh) * | 2019-12-13 | 2020-05-19 | 航天信息股份有限公司 | 一种基于Flink的日志流式处理方法及系统 |
CN111241078A (zh) * | 2020-01-07 | 2020-06-05 | 网易(杭州)网络有限公司 | 数据分析系统、数据分析的方法及装置 |
CN112506939A (zh) * | 2020-12-08 | 2021-03-16 | 福建省海峡信息技术有限公司 | 一种基于Flink流式引擎的CEP规则更新方法 |
CN112579639A (zh) * | 2019-09-29 | 2021-03-30 | 北京国双科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11397744B2 (en) * | 2018-07-19 | 2022-07-26 | Bank Of Montreal | Systems and methods for data storage and processing |
-
2022
- 2022-01-27 CN CN202210097067.6A patent/CN114116266B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112579639A (zh) * | 2019-09-29 | 2021-03-30 | 北京国双科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN111177193A (zh) * | 2019-12-13 | 2020-05-19 | 航天信息股份有限公司 | 一种基于Flink的日志流式处理方法及系统 |
CN111241078A (zh) * | 2020-01-07 | 2020-06-05 | 网易(杭州)网络有限公司 | 数据分析系统、数据分析的方法及装置 |
CN112506939A (zh) * | 2020-12-08 | 2021-03-16 | 福建省海峡信息技术有限公司 | 一种基于Flink流式引擎的CEP规则更新方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114116266A (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110427299B (zh) | 微服务系统应用的日志处理方法、相关设备及系统 | |
WO2020258290A1 (zh) | 日志数据收集方法、日志数据收集装置、存储介质和日志数据收集系统 | |
CN111966289B (zh) | 基于Kafka集群的分区优化方法和系统 | |
CN110928851B (zh) | 处理日志信息的方法、装置、设备及存储介质 | |
KR20170106648A (ko) | 대용량 네트워크 데이터의 처리 기법 | |
CN111339071A (zh) | 一种多源异构数据的处理方法及装置 | |
CN111970195B (zh) | 数据传输方法和流式数据传输系统 | |
CN111782692B (zh) | 一种频率控制方法及装置 | |
CN101146127A (zh) | 一种分布式系统中客户端缓存更新的方法和装置 | |
CN111177237B (zh) | 一种数据处理系统、方法及装置 | |
CN113703954A (zh) | 一种消息备份方法、装置、电子设备及计算机存储介质 | |
CN113391973B (zh) | 一种物联网云容器日志收集方法及装置 | |
CN110769018A (zh) | 一种消息推送方法及装置 | |
CN109508912B (zh) | 一种业务调度方法、装置、设备和存储介质 | |
CN111966943A (zh) | 流式数据分发方法和系统 | |
CN110620722B (zh) | 一种订单处理的方法和装置 | |
CN114710571B (zh) | 数据包处理系统 | |
CN113835905A (zh) | 一种消息队列负载均衡方法、装置、电子设备及介质 | |
CN114116266B (zh) | 一种基于流计算自动化拆分消息的方法及系统 | |
JPWO2010018637A1 (ja) | 業務フロー分散処理システム及び方法 | |
CN112887113A (zh) | 处理数据的方法、装置及系统 | |
CN107145529B (zh) | 一种数据处理方法及装置 | |
CN112256461B (zh) | 一种基于多云环境的分布式消息系统及管理方法 | |
CN115269519A (zh) | 一种日志检测方法、装置及电子设备 | |
CN112417015A (zh) | 数据分发方法和装置、存储介质及电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |