掌桥专利:专业的专利平台
掌桥专利
首页

一种基于高速并发消息框架的流式数据处理的方法

文献发布时间:2023-06-19 18:37:28


一种基于高速并发消息框架的流式数据处理的方法

技术领域

本发明涉及电力系统的信息技术处理领域,具体涉及基于高速并发消息框架的流式数据处理的方法。

背景技术

电力系统是国家运行的基础,是现代生活无法缺失的一部分;一旦电力系统由任何问题,都会对整个社会的生产生活造成巨大的影响。一旦电力系统发生任何故障,人类社会将会彻底进入黑暗状态,所以保持电力通常是政府最应该首先解决的问题。近年来,随着我国智能电网高速建设,对整个电力系统的自动化要求也越来越高。

随着物联网(IoT)设备广泛的运用,流式数据出现在越来越多的场景,比如交通实时监测和追踪、水文监测、物流动态、网络协议层流量分析、FEED实时分析,金融数据实时处理等。通常这些数据需要进行实时、高速、高吞吐计算,现有数据库无法满足以上要求。

发明内容

本申请提供了一种基于高速并发消息框架的流式数据处理的方法,典型的可以应用在高速高吞吐的流式数据处理技术领域以提高数据处理的实时性。

为了达到上述目的,本申请实施例提出了一种基于高速并发消息框架的流式数据处理的方法,其特征在于,包括:

确定处理流式数据的关系数据库PostgreSQL,并在该中,关系数据库PostgreSQL通过SQL语句创建流式数据扩展模块;

数据生产者针对流式数据Stream启用多个工作进程,并将数据插入到流失数据Stream中,并将流式数据随机发送到一个工作进程中;数据接收者通过基于ZeroMQ的API接口接收多个工作进程,并对应的将数据生产者发送来的数据发送到对应的队列里面,工作进程能够在对应的进程间通信获取数据;

数据接收者对接收到的流式数据,按照指定的时间间隔进行高吞吐数据聚合操作,并将聚合后的数据持久化到数据库的流视图中;其中该流视图为一张物化视图表;

使用SQL语言持续查询流式数据统计聚合结果,或将接收的流式数据进行实时转换后,存储到外部存储中或作为另一个流式数据处理的输入。

进一步的,所述方法还包括:在进行聚合前,在每条数据都打上当前时间戳标签,以支持对流式数据滑动窗口查询;其中滑动窗口与所述PostgreSQL数据库内置的聚合函数关联以实现滑动聚合。

进一步的,所述方法还包括:基于触发,对流式数据进行转换,并将转换后的流式数据作为另一个流式数据处理的输入,或将转换后的流式数据写入到外部数据存储中。

进一步的,所述数据接收者对接收到的流式数据,按照指定的时间间隔进行高吞吐数据聚合操作,包括:

数据接收者在通过FDW将数据插入到流式数据Stream后,通过ZeroMQ发送到对应的多个并发的工作worker进程;

将工作进程写入到对应的聚合combiner进程,并通过聚合进程对数据进行聚合,最后将聚合后的数据写入对应的物理表中以生成流视图;其中所述聚合进程每隔预定时间进行数据聚合。

进一步的,所述方法还包括:为流失图设定存活时间以定期对流视图中的过期数据进行清理。

进一步的,所述方法还包括:当一个流视图造成了未预估的系统负载或抛出异常时需要在问题修复前让流视图暂时停止工作,当异常解决后,再次激活流视图处理流式数据。

进一步的,所述方法还包括:当一个流视图造成了未预估的系统负载或抛出异常时需要在问题修复前让流视图暂时停止工作,当异常解决后,再次激活流视图处理流式数据。

本申请的上述技术方案的有益效果如下:上述技术方案提出了一种基于高速并发消息框架的流式数据处理的方法,可以实现流式数据集上进行SQL查询,特别适用于数据的概要和聚合、基于滑动窗口的性能计算、文本索引和过滤等查询场景。使用此方法处理数据可减少流数据的输入,显著地减少持久化到磁盘中的数据量,因为聚合后的结果才被存储下来。原始数据(foreign table)一旦被需要它的持续查询读取后就会被销毁。此种技术可实现占用较小的硬件资源实现高效的大数据量处理。此外,原始数据流式写入后,会被已声明的流式查询实时地转换和提取,可成型的输出加载到数据库,而不必周期性地处理颗粒数据,可消除许多数据传输中的ETL过程,非常适用于要求能实时查询结果的需求。

附图说明

图1为本申请实施例的基于高速并发消息框架的流式数据处理的方法的流程示意图;

图2为ZMQ的工作流程示意图。

具体实施方式

为使本申请要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。

近年来,国家电网公司加快打造具有全球竞争力的世界一流能源互联网企业的战略部署,贯彻公司“三型两网”战略,落实泛在电力物联网建设。为满足国家电网公司对电工装备实时监造和质量监督的需要,作为电工装备供应商,需要对国网公司要求的物资种类的生产制造和检验试验数据进行实时传输。电工装备业务面向的主体具有专业独特性,物资数据具有品类多样、生产工艺不一、关键数据采集类型和结果复杂的特性,尤其是不同生产工艺的电工装备数据更需要结合其生产过程进行评判和分析,并且随着各工厂侧终端的不断接入,必将不断产生海量、异构、多源的复杂数据,传统的云计算架构难以满足数据处理和前端服务的高效实时需求,海量数据集中接入极易造成网络拥塞。

发明人发现,关系数据库无法处理实时、高速、高吞吐流式数据;这样导致关系数据库无法应用在电力系统这样的复杂工况下。为此,发明人提出了一种在PostgreSQL数据库下的基于高速并发消息框架的流式数据处理方法,用来在精简后的流式数据集上进行SQL查询,以增加关系数据库的功能。其主要的功能包括:概要和聚合;基于滑动时间窗口的性能计算;文本索引和过滤;空间信息过滤等。

在实现方面,本申请实施例的技术方案中,是采用:FDW(Foreign Data Wrappers,外部数据包装器)技术实现流式数据导入操作,以将流式数据发送到PostgreSQL数据库;PostgreSQL数据库采用高速并发消息框架模块高速接收数据;接收的流式数据按照指定的时间间隔进行高吞吐数据聚合操作,并将聚合后的数据持久化到数据库一张物化视图表中,从而可以使用SQL语言持续查询流式数据统计聚合结果;或者接收的流式数据进行实时转换后,存储到外部存储中或作为另一个流式输入。

本申请的实施例提出了一种应用于PostgreSQL数据库的基于高速并发消息框架的流式数据处理的方法。本申请的技术方案应用于PostgreSQL数据库,对PostgreSQL数据库采用FDW访问外部流式数,使用ZeroMQ接收FDW传入的流式数据,实现N对N的高速消息处理。其中,ZeroMQ是一个基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。ZMQ是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。其中,ZMQ的工作流程如图2所示的,在此不再赘述。

具体的,本申请实施例的技术方案包括:

确定处理流式数据的关系数据库PostgreSQL,并在该中,关系数据库PostgreSQL通过SQL语句创建流式数据扩展模块;

在该PostgreSQL数据库中,确定基于FDW技术的公共接口,该公共接口可以使得扩展程序可以轻松地在优化、执行、扫描、更新和统计等核心部分和Postgres深度集成,从而可以用SQL语句直接查询和操作外部数据源。当流式数据产生后进行数据导入操作时,PostgreSQL数据库采用FDW访问外部流式数据(标记为stream);然后使用ZeroMQ(一个可嵌入的可扩展的基于异步消息处理任务的多核应用消息框架)接收FDW传入的流式数据。

本申请的技术方案实时聚集流式数据,并且只将聚合输出存储在常规的增量更新的物化视图;且原始流式数据不写入磁盘,聚合工作负载非常高效。此种流式数据处理机制主要支持实时报告和分析应用程序。

其中,流视图是将流式数据实时聚合后并进行实时增量更新,流视图可以被视为高吞吐量、实时的物化视图。流视图中的数据可设置存活时间标志来清理流视图中的过期数据。流视图可以被只是暂停或激活状态。流视图可与PostgreSQL数据库内置的各类聚合函数配合使用,实现实时流式数据的各类统计聚合功能。流式数据在进行聚合前每条数据都打上当前时间戳标签,可支持对流式数据滑动窗口查询。滑动窗口也可同PostgreSQL数据库内置的聚合函数一起使用,实现滑动聚合功能。流转换是用来触发事件,可实现不存储流式数据的情况下对其进行实时转换。转换后的数据既可以作为另一个流的输入,也可以写入到外部数据存储中。

ZeroMQ采用高级发布-订阅模式现实大规模分布式数据处理。订阅者和发布者之间的通信使用TCP或PGM协议,订阅者和worker的通信由于是在同一个进程中完成的,使用inproc(进程内通信)协议。为了现实高性能采用了分片策略,将工作量拆分成独立并行的流,一般根据CPU核心数量进行拆分,创建的线程数量应和CPU核心数一致。其中,ZeroMQ用于实现以下功能:

任务分发器生成大量可以并行计算的任务;

多个发布线程对应多个订阅线程,并发执行;

生成一组worker会处理这些任务;

结果收集器会在末端接收所有worker的处理结果,进行汇总。

在上述实施例中,数据生产者可以针对流式数据Stream启用多个工作进程执行数据插入操作,流式数据随机发送到一个工作进程中。数据接收者则通过基于ZeroMQ的API接口实现,对应的将数据生产者发送来的数据发送到对应的队列里面,工作进程就去这个IPC(Inter-Process Communication,进程间通信)里面获取数据。这时需要对每条流式数据打上当前时间戳标签,这个时间戳可以在流视图中辅助实现滑动窗口之功能。

数据聚合的工作是通过Combiner进程来完成的。数据在他通过FDW插入到流式数据Stream后,通过ZeroMQ发送到对应的worker进程中,该多个worker进程为多并发高速进程;写入到对应的combiner进程,通过combiner进程对数据进行聚合,最后将聚合后的数据写入对应的物理表(即流视图)。Combiner主要的工作就是一段时间间隔(一般设置5分钟)数据聚合。

流视图可以被视为高吞吐量、实时的物化视图,流视图将流和表中的数据组合后作为输入并进行实时增量更新。流式数据一旦被流视图读取后就会被销毁,流式数据不会存储在任何地方。随着数据不断插入,数据在内存中进行增量合并,并持久化到流视图中。流视图会不断增量的进行统计,只要查询流视图,就可以查看到实时的统计结果。当流式数据进入合并处理前,可以实现流式数据与静态的数据表匹配的行数据进行组合,这称为流-表关联。

流视图可以跟一般视图一样实现流视图创建(create)、删除(drop)流视图,截断(Truncate)流视图,查看(select)流视图等。除了以上功能外,还可以通过设置存活时间(TTL)来清理流视图中的过期数据(设定或修改TTL)。流视图会持续处理流式数据,当一个流视图造成了未预估的系统负载或抛出异常时需要在问题修复前让流视图暂时停止工作,当异常解决后,可以再次激活流视图处理流式数据(激活或中止流视图)。

流视图支持PostgreSQL数据库内置的各类概率统计聚合函数,除了支持常用通用聚合函数(max/min、Sum,count等等),还支持统计聚合函数(方差、标准差、平均值等),还包括布隆过滤函数(Bloom Filter),Top-K函数、频率计算函数(FREQUENCY),精确排序统计(T–Digest)等特殊函数。除此之外,还可以跟PostgreSQL数据库特色扩展一起使用,例如结合PostGis可实现对车辆的位置实时跟踪和轨迹合并,动态的绘制车联网数据。

很多场景的数据有时效或者有时间窗口的概念,可提供按时间窗口分片的接口,允许用户对数据的时效进行定义,例如仅仅统计最近一分钟的时间窗口内的统计数据。由于流视图是实时增量更新的,在更新流视图结果集时需考虑当前时间,查询子句中包含与当前时间相关信息的查询被称作滑动窗口查询。滑动的查询子句可过滤或接收到流数据集合并随时间持续变化的。

滑动窗口也可同聚合函数一起使用可称为滑动聚合。滑动聚合可以尽可能地聚合输入数据,但不会随时间演进而丢失用于维系窗口的粒度。这部分聚合函数对用户是完全透明的,只有滑动聚合后的结果才对用户可见。流视图中的窗口期数据会在一段时间后失效,因为这些数据的时间已经小于窗口的下限。这些数据在TTL过期后无法查询实现逻辑删除,然后通过PostgreSQL数据库的aotuvacuum机制进行物理删除。

流转换可以在不存储流式数据的情况下对其进行实时转换。转换后的数据既可以作为另一个流的输入,也可以写入到外部数据存储中。所有流转换都有与其对应的输出流,可以很容易地被其它流转换或流视图读到。流转换的输出流只包含被查询的内容,由于数据不存储数据,所以流转换不支持聚合操作。

与流视图不同的是,流转换是用来触发事件,可以设定条件,当记录满足条件时,就触发事件。例如监视传感器的值,当值的范围超出时,触发报警(如通过REST接口发给指定的server),或者将报警记录下来(通过触发器函数)。

采用这种基于高速并发消息框架的流式数据处理方法可以实现流式数据集上进行SQL查询,特别适用于数据的概要和聚合、基于滑动窗口的性能计算、文本索引和过滤等查询场景。使用此方法处理数据可减少流数据的输入,显著地减少持久化到磁盘中的数据量,因为聚合后的结果才被存储下来。原始数据(foreign table)一旦被需要它的持续查询读取后就会被销毁。此种技术可实现占用较小的硬件资源实现高效的大数据量处理。此外,原始数据流式写入后,会被已声明的流式查询实时地转换和提取,可成型的输出加载到数据库,而不必周期性地处理颗粒数据,可消除许多数据传输中的ETL过程,非常适用于要求能实时查询结果的需求。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序。在计算机上加载和执行所述计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机程序可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,高密度数字视频光盘(digital video disc,DVD))、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。

本领域普通技术人员可以理解:本申请中涉及的第一、第二等各种数字编号仅为描述方便进行的区分,并不用来限制本申请实施例的范围,也表示先后顺序。

本申请中的至少一个还可以描述为一个或多个,多个可以是两个、三个、四个或者更多个,本申请不做限制。在本申请实施例中,对于一种技术特征,通过“第一”、“第二”、“第三”、“A”、“B”、“C”和“D”等区分该种技术特征中的技术特征,该“第一”、“第二”、“第三”、“A”、“B”、“C”和“D”描述的技术特征间无先后顺序或者大小顺序。

本申请中各表所示的对应关系可以被配置,也可以是预定义的。各表中的信息的取值仅仅是举例,可以配置为其他值,本申请并不限定。在配置信息与各参数的对应关系时,并不一定要求必须配置各表中示意出的所有对应关系。例如,本申请中的表格中,某些行示出的对应关系也可以不配置。又例如,可以基于上述表格做适当的变形调整,例如,拆分,合并等等。上述各表中标题示出参数的名称也可以采用通信装置可理解的其他名称,其参数的取值或表示方式也可以通信装置可理解的其他取值或表示方式。上述各表在实现时,也可以采用其他的数据结构,例如可以采用数组、队列、容器、栈、线性表、指针、链表、树、图、结构体、类、堆、散列表或哈希表等。

本申请中的预定义可以理解为定义、预先定义、存储、预存储、预协商、预配置、固化、或预烧制。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

技术分类

06120115635719