CN109871502A - 一种基于Storm的流数据正则匹配方法 - Google Patents
一种基于Storm的流数据正则匹配方法 Download PDFInfo
- Publication number
- CN109871502A CN109871502A CN201910047920.1A CN201910047920A CN109871502A CN 109871502 A CN109871502 A CN 109871502A CN 201910047920 A CN201910047920 A CN 201910047920A CN 109871502 A CN109871502 A CN 109871502A
- Authority
- CN
- China
- Prior art keywords
- data
- message
- storm
- kafka
- schema
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于Storm的流数据正则匹配方法,属于计算机技术领域。本方法包括:搭建实时处理集群,使用Kafka集群作为数据缓存模块,将原始数据进行序列化后打包到一个Message中,加载到Kafka消息队列;订阅Kafka中某个Topic的数据,获取的Message数据按序填入Storm的单元Tuple中,直接将Tuple发送给计算算子Bolt;Bolt对Tuple拆包,对得到的Message数据解包并进行反序列化,将反序列化后的有效数据分块进行模式匹配。本发明保证了数据在Storm集群中传输的批量处理,提高了数据在Storm实时计算集群中的传输效率,并提高了正则匹配的效率。
Description
技术领域
本发明属于计算机技术领域,涉及互联网的数据处理,具体涉及一种基于Storm的面向流数据的实时处理的正则匹配技术。
背景技术
随着互联网的快速发展,网络信息呈指数级增长,使待检测数据量以及正则表达式的规则数据剧增。同时,在大量网络数据的处理业务中经常需要对如报文等数据进行实时处理,这对正则表达式的匹配技术的实时匹配性能提出了巨大的挑战。目前正则表达式匹配技术的研究主要集中在将其转化为自动机进行匹配时的匹配效率和空间存储两方面,而正则表达式在流数据实时处理中仅能支持简单的模糊匹配筛选,无法满足复杂匹配场景的业务需求。因此,亟待提出一种实时性强的能够支持多种正则匹配规则的技术。
Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,大数据实时处理解决方案(流计算)的应用日趋广泛,而Storm是流计算技术中的佼佼者和主流。Storm实现了一个数据流(data flow)的模型,在这个模型中数据持续不断地流经一个由很多转换实体构成的网络。一个数据流抽象叫做流(stream),流是无限的元组(Tuple)序列。元组就像一个可以表示标准数据类型(例如int,float和byte数组)和用户自定义类型的数据结构。每个流由一个唯一的ID来标示的,这个ID可以用来构建拓扑中各个组件的数据源。
发明内容
本发明为了提高流数据正则匹配的效率和解决流数据处理中只支持简单正则匹配的问题,提供了一种基于Storm的流数据正则匹配方法。
一种基于Storm的流数据正则匹配技术方法,实现包括如下步骤:
步骤1,搭建实时处理集群,实时处理集群中包括Kafka集群和Storm集群,并部署Schema Register Server服务;实时处理集群中,Kafka作为Storm实时处理引擎的数据源,将Kafka中Topic所对应的数据格式的描述Schema注册到Schema Register Server服务中;实时处理集群按照Schema描述的数据格式将原始数据进行序列化,将序列化后的数据进行批量打包到一个Message中,将Message数据加载到Kafka消息队列中;
步骤2,利用Kafka Spout订阅Kafka中某个Topic的数据,获取的Message数据按序填入Storm的单元Tuple中,直接将Tuple发送给Storm的计算算子Bolt;
步骤3,计算算子Bolt从Schema Register Server中获取Kafka中每一个Topic对应的数据格式的描述Schema,将获取的Topic与Schema的对应关系放到一个Map结构的缓存中;
步骤4,计算算子Bolt在数据初始化时,对输入的正则匹配表达式生成相应的模式匹配模板;
步骤5,计算算子Bolt对获得的Tuple数据拆包,得到Message数据,解包Message数据;根据Message的数据头,获取该Message数据所对应的Topic,再获取相应的Schema,将Message中的数据进行反序列化;计算算子Bolt将反序列化后的数据中的有效载荷划分成多个固定长度的块,逐个对每一块根据相应的正则匹配模板进行模式匹配。
本发明的优点与积极效果在于:本发明改变了Storm集群中数据传输转换方式,采用序列化好的数据进行传输,减少了传输数据量,解决了Kafka Spout生成Tuple的速度瓶颈,使得整个集群的处理速度得到有效的提升;在各个Bolt上进行反序列化,Bolt为分布式多点布置并对数据块进行并行处理,提高了反序列化的效率;在数据流进行正则匹配时将数据分块,提高了短而有效数据的正则匹配效率。
附图说明
图1是本发明对Storm的数据处理过程进行改进的示意图;
图2是本发明对数据进行正则匹配过程进行改进的示意图;
图3是本发明实施例提供的一个实时处理集群的整体系统架构图;
图4是本发明实施例中Schema初始化的流程图;
图5是本发明实施例中进行数据正则匹配处理的流程图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明将Storm流处理技术与正则匹配技术相结合,根据Storm中Tuple处理结构和正则匹配数据包载荷有效结合,可以提高整个流处理集群的处理速度,提升正则表达式匹配的效率。
本发明在数据缓存模块中采用Kafka消息队列进行缓存数据的存储。Storm的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流,而是时而多时而少。对于这种情况下进行批处理是不合适的,因此引入了Kafka作为消息队列,与Storm完美配合,这样可以实现稳定的流式计算。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费大规模的网站中的所有动作流数据,每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。本发明中Kafka作为Storm实时处理引擎的数据源。本发明将Kafka中Topic所对应的数据类型的描述Schema注册到一个单独的Schema Register Server服务中。Schema Register Server代表架构注册服务,提供了对Topic对应Schema的注册和获取的功能,是数据序列化和反序列化操作的依据。
本发明在数据的实时处理中采用Storm流数据实时处理引擎,整个Storm集群由Spout(数据源)和Bolt(数据处理)两类算子组成,Spout负责数据的输入,Bolt负责数据的处理以及输出到指定的数据存储中。使用Kafka Spout从Kafka集群中消费Message(Kafka中数据存储的格式)数据,生成Tuple(Storm中一次消息传递的基本单元)结构数据,然后把Tuple数据传递给对应的Bolt。在Storm集群数据传递的过程中,数据以Tuple的形式在各个算子之间传递。在原始的Storm处理流程中,Kafka Spout中一个Tuple对应Kafka中的一条Message,Kafka Spout消费到Kafka中的Message后,需要对该Message按照对应的Schema进行反序列化。然后,按照Tuple的生成规则,将相应的数据生成一个Tuple,并发送给对应的Bolt算子。此时,Kafka Spout处理Kafka Message生成Tuple是一对一的关系。该方式在大规模数据流传输过程中,效率较低。
本发明对Storm的数据处理过程进行了改进,如图1所示,对数据的传输转换过程进行了优化。Kafka Spout消费Kafka中的Message后并不进行反序列化操作,而是把Message批量打包发送给Bolt,在Bolt中把每一条Message按照Schema进行反序列化,转换生成Tuple结构的数据,然后按照Bolt的逻辑处理规则对数据进行处理。在传递过程中的Message相比较原生的Tuple来说,实现了数据的快速批量处理。这一解决了Kafka Spout生成Tuple的速度瓶颈,使得整个集群的处理速度得到有效的提升。Kafka Spout用来实现Strom从Kafka中读取数据,本质是实现一个Storm中的Spout,来读取Kafka中的数据,这个Spout称为Kafka Spout。
本发明在数据进行正则匹配时对正则匹配过程进行了改进,如图2所示。图2中,将数据流分块,每块L个字符,并行对一个处理窗口内的每个块依次与一个正则匹配模板进行匹配。计算算子Bolt在解析出Message中的数据并根据相应的Schema进行反序列化后,把数据包的有效载荷划分成多个固定长度的块,逐个地对每一块执行模式匹配。对于每块仅需要较少数量的比较。相对于全量的网络报文数据流,有效的数据量较少,而且需要进行用户行为分析的大部分正则匹配模板都很短。对多个模板的并行匹配,加快了处理速度,减少了指令间的相关性。对于非固定长度的正则表达式模板,通过一个哈希表来尽可能避免对大部分数据包的进一步检查匹配。如此,需要少量的内存来存储经常使用的数据,这些数据存储在高速缓存(Cache)中,因此CPU绝大部分时间并不需要访问主内存。内存访问延迟的时间通常是数百倍于CPU时钟周期,由于需要很少的内存访问,从而加快了模式匹配的速度。
窗口为Storm抽象出来的数据处理的概念,方便做一些统计计算。支持每隔一段时间(Sliding interval)集中处理落在相同窗口下的所有tuples,一个窗口为一个批。窗口长度(Window length)可以是时间段也可以tuple数量。目前有两种窗口抽象:TumblingWindow:Sliding interval=Window length这就使得一个tuple只属于一个窗口;SlidingWindow:Sliding interval<>Window length这就使得一个tuple可能属于多个窗口。
本发明支持正则表达式中常见的元字符,如下表所示:
表1正则表达式中常见的元字符
元字符 | 意义及说明 |
^ | 匹配输入字符串开始的位置 |
$ | 匹配输入字符串结尾的位置 |
. | 匹配除换行符之外的任何单个字符 |
? | 零次或一次匹配前面的字符或子表达式 |
* | 零次或多次匹配前面的字符或子表达式 |
+ | 一次或多次匹配前面的字符或子表达式 |
{n} | 正好匹配n次(n是非负整数) |
{n,} | 至少匹配n次(n是非负整数) |
{n,m} | 匹配至少n次,至多m次(n,m是非负整数) |
\d | 匹配数字 |
\s | 匹配任何空白字符 |
\w | 匹配字母或数字或下划线或汉字 |
a|b | 或关系,匹配a和b中的任一项即可 |
[abc] | 字符集合,匹配其中任意一个字符,相当于a|b|c |
[^abc] | 反向字符集合,匹配除a、b、c之外的任意一个字符 |
[a-z] | 字符范围,匹配指定范围内的任何字符 |
[^a-z] | 反向字符范围,匹配不在指定范围内的任何字符 |
\ | 转义符号 |
(正则表达式) | 使用()可以对表达式进行分组 |
本发明支持对数据块进行将元字符灵活组合实现的功能有:任意数字匹配,字符串开始或结束匹配,单词的开始或结束匹配,重复匹配,字符集匹配,或逻辑运算匹配,反义匹配,对分组的向后引用、零宽断言、负向零宽断言匹配等。
下面说明本发明实施例实现的一种基于Storm的流数据正则匹配方法,具体如步骤一至步骤五所示。
步骤一、实时处理集群的搭建。
集群搭建如图3所示的本发明所依赖的整体分布式架构,包括Zookeeper,Kafka集群和Storm集群,并部署Schema Register Server服务。Zookeeper是一个主要负责分布式系统的协调服务。在系统启动后将Kafka中Topic与数据描述Schema注册到SchemaRegister Server服务中,根据Schema Register Server服务中的Schema进行数据的加载。消息可以通过各种方式进入到Kafka消息中间件,比如可以通过使用日志收集系统Flume作为数据的生产者(Consumer)来收集网络或日志数据,然后在Kafka中路由暂存。按照Schema描述的数据格式将原始数据进行序列化,将序列化后的数据进行批量打包,打包到一个Message中,将Message数据加载到Kafka消息队列中。
步骤二、利用Kafka Spout订阅Kafka中某个Topic的数据,获取的Message数据按序填入Tuple基本单元中,将Message直接组成Tuple中的值列表value list,直接发送给Storm集群中的计算算子Bolt。
步骤三、Schema初始化,如图4所示,该步骤在整个系统初始化时进行。计算算子Bolt从Schema Register Server中获取Kafka中每一个Topic对应的数据格式的描述Schema,将获取的Topic与Schema的对应关系放到一个Map结构的缓存中,已供后续数据处理过程中进行数据的反序列化。
步骤四、在Storm数据实时处理的算子Bolt中,在数据初始化时对输入的正则匹配表达式进行分析,并生成相应的模式匹配模板,以待后续进行正则模式匹配应用。步骤四在整个系统初始化时进行。
步骤五、进行数据正则匹配处理,如图5所示,计算算子Bolt拿到Message组成的value list的Tuple数据,将数据拆包拿到Message数据。解包Message数据,获取该Message中的数据和数据头。根据Message数据的数据头,获取该Message数据所对应的Topic。再根据该Topic获取相应的Schema,将Message中获取的数据进行反序列化。将反序列化后的数据根据信息的有效性进行分块,每一块根据相应的正则匹配模板进行正则匹配的处理。该步骤会在Storm实时处理集群中的Bolt算子中进行分布式的实时处理。
对反序列化后的数据进行分块,块的大小可以根据时间和字节长度两个条件来进行设置。本发明提供的一个实例为,块大小的时间间隔设置为500ms,字节长度设置为1024个字节,当时间间隔为500ms或字节长度达到1024个字节时则划分为一个块。
显然,所描述的实施例也仅仅是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员能够对上述详细描述的本发明做出各种修改和改进,在不脱离权利要求所要求的本发明的精神和范围的情况下,都属于本发明保护的范围。
Claims (5)
1.一种基于Storm的流数据正则匹配方法,其特征在于,包括如下步骤:
步骤1,搭建实时处理集群,实时处理集群中包括Kafka集群和Storm集群,并部署Schema Register Server服务;实时处理集群中,Kafka作为Storm实时处理引擎的数据源,将Kafka中Topic所对应的数据格式的描述Schema注册到Schema Register Server服务中;实时处理集群按照Schema描述的数据格式将原始数据进行序列化,将序列化后的数据进行批量打包到一个Message中,将Message数据加载到Kafka消息队列中;
步骤2,利用Kafka Spout订阅Kafka中某个Topic的数据,获取的Message数据按序填入Storm的单元Tuple中,直接将Tuple发送给Storm的计算算子Bolt;
步骤3,计算算子Bolt从Schema Register Server中获取Kafka中每一个Topic对应的数据格式的描述Schema,将获取的Topic与Schema的对应关系放到一个Map结构的缓存中;
步骤4,计算算子Bolt在数据初始化时,对输入的正则匹配表达式生成相应的模式匹配模板;
步骤5,计算算子Bolt对获得的Tuple数据拆包,得到Message数据,解包Message数据;根据Message的数据头,获取该Message数据所对应的Topic,再获取相应的Schema,将Message中的数据进行反序列化;计算算子Bolt将反序列化后的数据中的有效载荷划分成多个固定长度的块,逐个对每一块根据相应的正则匹配模板进行模式匹配。
2.根据权利要求1所述的方法,其特征在于,所述的步骤2中,Message直接组成Tuple中的值列表value list。
3.根据权利要求1所述的方法,其特征在于,所述的步骤5中,计算算子Bolt根据时间和字节长度来对数据进行块划分。
4.根据权利要求3所述的方法,其特征在于,所述的步骤5中,计算算子Bolt进行块划分时,当时间间隔为500ms或字节长度达到1024个字节时则划分为一个块。
5.根据权利要求1所述的方法,其特征在于,所述的计算算子Bolt为分布式多点布置,并对数据块进行并行处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910047920.1A CN109871502B (zh) | 2019-01-18 | 2019-01-18 | 一种基于Storm的流数据正则匹配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910047920.1A CN109871502B (zh) | 2019-01-18 | 2019-01-18 | 一种基于Storm的流数据正则匹配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109871502A true CN109871502A (zh) | 2019-06-11 |
CN109871502B CN109871502B (zh) | 2020-10-30 |
Family
ID=66917762
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910047920.1A Active CN109871502B (zh) | 2019-01-18 | 2019-01-18 | 一种基于Storm的流数据正则匹配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109871502B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110505229A (zh) * | 2019-08-23 | 2019-11-26 | 四川长虹电器股份有限公司 | 一种基于storm的账号安全性检测方法 |
CN110943911A (zh) * | 2019-12-19 | 2020-03-31 | 北京轻元科技有限公司 | 基于protobuf的物联网高效数据传输方法 |
CN113360576A (zh) * | 2021-06-16 | 2021-09-07 | 国电南瑞科技股份有限公司 | 一种基于Flink Streaming的电网海量数据实时处理方法及装置 |
CN113420048A (zh) * | 2021-05-19 | 2021-09-21 | 中交公规土木大数据信息技术(北京)有限公司 | 数据汇聚方法、装置、电子设备及存储介质 |
CN114793245A (zh) * | 2022-06-22 | 2022-07-26 | 杭州又拍云科技有限公司 | 一种灵活可配置的流式信息处理方法及系统 |
CN114860673A (zh) * | 2022-07-06 | 2022-08-05 | 南京聚铭网络科技有限公司 | 基于动静结合的日志特征识别方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104767710A (zh) * | 2014-01-02 | 2015-07-08 | 中国科学院声学研究所 | 基于dfa的http分块传输编码的传输载荷提取方法 |
CN104899264A (zh) * | 2015-05-21 | 2015-09-09 | 东软集团股份有限公司 | 一种多模式正则表达式匹配方法及装置 |
CN105404686A (zh) * | 2015-12-10 | 2016-03-16 | 湖南科技大学 | 一种基于地理特征层次分词的新闻事件地名地址匹配方法 |
CN106599222A (zh) * | 2016-12-19 | 2017-04-26 | 广州四三九九信息科技有限公司 | 一种流式并行处理日志的方法和设备 |
CN106920158A (zh) * | 2017-03-22 | 2017-07-04 | 北京再塑宝科技有限公司 | 基于Storm和Kafka技术的订单实时监控系统 |
-
2019
- 2019-01-18 CN CN201910047920.1A patent/CN109871502B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104767710A (zh) * | 2014-01-02 | 2015-07-08 | 中国科学院声学研究所 | 基于dfa的http分块传输编码的传输载荷提取方法 |
CN104899264A (zh) * | 2015-05-21 | 2015-09-09 | 东软集团股份有限公司 | 一种多模式正则表达式匹配方法及装置 |
CN105404686A (zh) * | 2015-12-10 | 2016-03-16 | 湖南科技大学 | 一种基于地理特征层次分词的新闻事件地名地址匹配方法 |
CN106599222A (zh) * | 2016-12-19 | 2017-04-26 | 广州四三九九信息科技有限公司 | 一种流式并行处理日志的方法和设备 |
CN106920158A (zh) * | 2017-03-22 | 2017-07-04 | 北京再塑宝科技有限公司 | 基于Storm和Kafka技术的订单实时监控系统 |
Non-Patent Citations (2)
Title |
---|
周敏菲: ""基于Kafka和Storm的实时日志流处理系统的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
小得盈满: ""Storm集成Kafka应用的开发 www.cnblogs.com/freeweb/p/5292961.html"", 《博客园》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110505229A (zh) * | 2019-08-23 | 2019-11-26 | 四川长虹电器股份有限公司 | 一种基于storm的账号安全性检测方法 |
CN110943911A (zh) * | 2019-12-19 | 2020-03-31 | 北京轻元科技有限公司 | 基于protobuf的物联网高效数据传输方法 |
CN110943911B (zh) * | 2019-12-19 | 2022-05-31 | 北京轻元科技有限公司 | 基于protobuf的物联网高效数据传输方法 |
CN113420048A (zh) * | 2021-05-19 | 2021-09-21 | 中交公规土木大数据信息技术(北京)有限公司 | 数据汇聚方法、装置、电子设备及存储介质 |
CN113360576A (zh) * | 2021-06-16 | 2021-09-07 | 国电南瑞科技股份有限公司 | 一种基于Flink Streaming的电网海量数据实时处理方法及装置 |
CN114793245A (zh) * | 2022-06-22 | 2022-07-26 | 杭州又拍云科技有限公司 | 一种灵活可配置的流式信息处理方法及系统 |
CN114860673A (zh) * | 2022-07-06 | 2022-08-05 | 南京聚铭网络科技有限公司 | 基于动静结合的日志特征识别方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109871502B (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109871502A (zh) | 一种基于Storm的流数据正则匹配方法 | |
US9275050B2 (en) | Global dictionaries using universal primitives | |
CN108809854A (zh) | 一种用于大流量网络处理的可重构芯片架构 | |
Dai et al. | A 1 cycle-per-byte XML parsing accelerator | |
CN102426610A (zh) | 微博搜索排名方法及微博搜索引擎 | |
CN102509549A (zh) | 语言模型训练方法及系统 | |
CN105897587B (zh) | 一种数据包分类方法 | |
CN114418129B (zh) | 一种深度学习模型训练方法及相关装置 | |
Hussain et al. | Novel Dynamic Partial Reconfiguration Implementation of K‐Means Clustering on FPGAs: Comparative Results with GPPs and GPUs | |
US20230030265A1 (en) | Object processing method and apparatus, storage medium, and electronic device | |
CN112235344A (zh) | 一种面向分布式机器学习的稀疏通信模型的实现方法 | |
CN110069444A (zh) | 一种计算单元、阵列、模块、硬件系统及实现方法 | |
CN112231471B (zh) | 文本处理方法及装置、计算机设备、存储介质 | |
CN103577161A (zh) | 一种面向大数据的数据频度并行处理方法 | |
Sun et al. | GSSP: Eliminating stragglers through grouping synchronous for distributed deep learning in heterogeneous cluster | |
CN209708122U (zh) | 一种计算单元、阵列、模块、硬件系统 | |
Sanka et al. | Efficient high-performance FPGA-Redis hybrid NoSQL caching system for blockchain scalability | |
Zazo et al. | A single-fpga architecture for detecting heavy hitters in 100 gbit/s ethernet links | |
CN107436865A (zh) | 一种词对齐训练方法、机器翻译方法及系统 | |
Zhang et al. | Optimizing execution for pipelined‐based distributed deep learning in a heterogeneously networked GPU cluster | |
CN115062028B (zh) | 一种OLTP领域多表join查询的方法 | |
US20230083123A1 (en) | State-Sequence Pathing | |
Moussalli et al. | A study on parallelizing XML path filtering using accelerators | |
Li et al. | FPGA-based regular expression matching acceleration system design and implementation | |
Wang et al. | A distributed semantic filtering model based on approximate automata for heterogeneous multi-sensor networks |
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 |