一种描述流式统计运算方式的配置方法与流程

文档序号:35063664发布日期:2023-08-09 02:43阅读:53来源:国知局
一种描述流式统计运算方式的配置方法与流程

本发明涉及大数据应用,具体地说涉及一种描述流式统计运算方式的配置方法。


背景技术:

1、随着各行业的不断发展,企业对数据时效性的重视程度日益增加,而流式数据统计技术正被各个行业、越来越多的企业所采用,比如:互联网企业实时统计产品的pv、uv;电商企业实时统计平台的交易额、交易量;电信运营商实时统计网络数据包的传输量、传输效率;智能交通系统实时统计道路上的人流、车流。这些常见的流式统计技术的应用提高了企业的运营效率,也给我们的生活带来了很大的便利。

2、流式数据统计技术的应用具有极大的产业价值,然而目前该领域的发展依然存在着很多瓶颈。当前业内针对流式统计服务的实现方案大多是基于flinksql、sparksql、olap类引擎以及其他衍生类技术方案实现,而这类技术方案都是基于sql语言进行数据的统计与分析。虽然sql语言在数据存储查询和离线统计分析等方面被广泛应用,但是在流式统计这个细分领域内,sql语言的应用存在着一些弊端,主要分为两类:

3、1、使用方面的问题,sql语法过于臃肿和复杂、不够清晰简洁、多过滤条件的组合逻辑需要依赖较长的sql语句来实现,不便于理解;sql函数定制化功能扩展不够方便;sql语言的开发相对较复杂,实现相同的功能sql可能会有多种写法,不同写法执行和解析效率也各有差异;这些问题使得相应功能的实现需要依赖专业的数据研发人员,导致流式统计任务研发成本高、开发周期长。

4、2、性能方面的问题,由于sql本身是基于数据表的概念进行数据处理,不可避免的需要存储较多的原始数据或中间态数据在内存中,造成较高的内存浪费;分布式sql在数据的处理过程中会触发shuffle,造成大量的网络传输,影响执行效率;sql在一些分组聚合操作中可能引起较为严重的数据倾斜,对程序的正常执行造成严重影响。这类问题导致对于不同的流式统计任务需要制定单独的优化方案,使得sql在流式大数据统计领域被局限在针对特定需求单独开发的范畴之内,也因此制约了流式统计技术更大规模的应用。

5、sql语言的上述问题在流式统计需求呈指数级增长时,其自身瓶颈也凸显出来。针对这种现状目前业内尚没有解决方案,因此本发明提出了一种描述流式统计运算方式的配置方法,用于取代sql语言在流式大数据统计这个细分领域内的应用。这种配置方法功能强大、易于扩展、语法简洁清晰、便于理解和使用,即便没有技术背景的人员也依然可以很好的使用该方法。此外本发明基于该配置方法,提供了一套通用型流式大数据统计系统的实现方案,该实现方案侧重于规避shuffle操作,降低运算过程中网络数据传输量,并针对流式统计各种运算场景进行统一的组件化封装,着重优化内存占用和网络io问题,使得各种运算组件可以达到复用的效果。基于此发明可以降低企业使用流式大数据统计技术的门槛,降低企业的研发成本、提高数据利用效率,具有比较高的实际应用价值。


技术实现思路

1、本发明提供了一种描述流式统计运算方式的配置方法,并基于该种配置方法提供了一套通用型流式大数据统计系统的实现方案。本发明可以帮助企业应对繁杂的流式数据统计需求,降低企业的研发成本。描述流式统计运算方式的配置方法,包括以下步骤:

2、步骤s1、创建统计组,统计组是基于一份元数据的一个或多个统计项的合称,统计组下所有的统计项只需要基于一份统计原始消息数据即可进行相关指标统计,其目的在于可以减少原始消息数据的重复发送从而减少网络数据传输,此外统计组也便于用户对统计指标的管理和维护;

3、步骤s2、创建统计组所对应的元数据结构,包含统计相关字段名和字段类型;

4、步骤s3、创建统计项,一个统计组下可包含一个或多个统计项,每个统计项配置主要包括:统计模板配置、统计周期配置和数据有效期配置。

5、进一步地,上述步骤s3中统计模板配置包括:统计表达式配置,用于指定统计项的计算规则;维度表达式配置,用于指定统计项的维度信息;结果筛选表达式配置,用于对统计结果进行筛选操作。

6、优选地,统计模板配置可基于xml、json、yaml、cson、toml或其他键值对格式的文本配置的方式实现,该配置方式语法清晰、便于理解和使用。

7、进一步地,本发明将流式统计运算场景抽象分类成多种运算单元,包括:次数运算单元、求和运算单元、最大值运算单元、最小值运算单元、平均值运算单元、时序运算单元和基数运算单元,运算单元可根据需要进行扩展。

8、进一步地,统计表达式由一个或多个统计运算单元组成,多个统计运算单元之间可进行算术运算。统计运算单元的配置格式为:

9、function_name(related_column,filter_unit1,filter_unit2,...),其中,

10、function_name为统计运算函数名称;

11、related_column为运算关联参数;

12、filter_unit为筛选参数;

13、进一步地,统计运算的关联参数与统计运算单元的类型有关,次数运算的关联参数值默认为1,不需要额外指定;求和运算关联参数为进行求和运算的相关字段,其值为数值类型;最大值运算关联参数为进行求最大值运算的相关字段,其值为数值类型;最小值运算关联参数为进行求最小值运算的相关字段,其值为数值类型;平均值运算关联参数为进行求平均值运算的相关字段,其值为数值类型;基数运算关联参数为进行基数运算的相关字段,其值为字符串类型;时序运算关联参数为进行时序运算的相关字段,其值为数值类型。

14、进一步地,筛选参数是结果为布尔类型的表达式,用于对时间窗口内的原始消息进行过滤判定,每个统计运算单元可根据需要指定0个或多个筛选参数,多个筛选参数之间为逻辑与运算关系,每个筛选参数由一个或多个筛选条件组成,多个筛选条件之间使用逻辑运算符连接。

15、进一步地,统计表达式和维度表达式中可使用转化类函数,转化类函数是对原始消息相关字段按指定方式进行转化操作后再进行后续运算。统计周期用于指定流式计算的时间窗口,包含滚动窗口类型和滑动窗口类型,每种窗口类型的时间粒度包含秒级、分钟级、小时级、天级,用户可自定义统计周期。维度表达式可指定0个或多个维度,多个维度之间使用指定分割符分割。结果筛选表达式用于对统计结果进行筛选操作,可用于常见的topn或lastn运算。

16、本发明基于上述配置方法提供了一套通用型流式大数据统计系统的实现方案,包括以下内容:

17、1.系统从client端发送消息到最终的统计结果入库中间的每个环节都对重复性消息进行聚合处理,系统的消费链路是一个逐层递减的结构。系统将数据消费的整个链路分成四个基本环节:一是client模块收发消息环节,二是rpc模块处理消息环节,三是运算模块按照统计组下所有统计项对消息数据执行展开和分组操作的环节,四是统计运算执行和统计结果存储环节。系统采用异步处理、批量消费,在每一个处理环节都将对消息事件进行充分的聚合操作,将同类型消息合并到一起处理。同类型消息是指消息内容一致的消息,包括相同统计组、相同维度、相同批次、相同参数的消息。这种设计可以减少数据量向下游传输、提升网络io效率、又可以直接减少下游运算量以及db的写入压力。

18、2.在大数据任务的执行过程中shuffle是影响性能比较主要的一个因素,shuffle除了会带来大量的网络开销还可能引起数据倾斜甚至oom等问题,系统采取避免shuffle这种不可控的因素从而规避shuffle可能带来的不可预料的问题。本发明的实现方案中运算模块将统计结果数据和中间态数据均保存在外部存储装置中。运算模块的各个运算节点只需要与存储装置通信,节点之间互相无需通信。系统通过消息缓冲池的设计来降低对外部存储的读写压力,通过分布式锁保证并发访问问题,基于这种设计方案可以避免数据倾斜、防止出现oom等问题,集群内每一个运算节点负载更为均衡、可以更加充分的利用服务器的运算资源。

19、3.在本系统中聚合处理操作所依赖消息缓冲池的实现方式基于优先阻塞队列,系统将消息缓冲池分成若干个slot,每一个slot由一个boundedpriorityblockingqueue(优先阻塞队列)和slot对应的最后访问时间戳组成。消息缓冲池的处理逻辑包括以下步骤:producer可指定消息事件的key,key用于区分是否为相同类型消息,其值可根据统计组标识、统计项标识、统计周期和统计维度等信息生成(如上文所述系统在数据消费的四个环节中都有对消息数据进行聚合操作,不同环节的key值生成逻辑略有差异);消息缓冲池依据key为消息分配对应的slot;slot对其内部的消息按照key进行优先排序;消费线程队列定时轮询各个slot;判断slot的使用容量是否超出阈值,slot的阈值为batchsize*backlog_factor,其中batchsize为指定的单次消费最大消息数量,backlog_factor为指定的消息积压系数;如果slot的使用容量没有超出阈值,则继续判定slot的上次访问时间,如果超出时间阈值则批量按顺序读取消息进行消费,否则跳过本次任务。消费slot消息后更新slot使用容量以及最后访问时间。基于这种缓冲池设计可以将同类型消息尽可能聚合到一起计算,从而直接减少下游任务的运算量和db的写入压力。

20、4.基数统计是流式大数据统计中占用资源较多的运算类型,如果对基数原始值进行完整存储后再进行统计,无疑会造成较大的数据写入损耗以及内存资源的占用。为了避免这种情况本发明提供了一种内存占用更少的基数统计实现方案。该实现方案内置重复数据过滤装置用于实现基数统计,该过滤装置包含多个分片,每个分片对应一个roaringbitmap数据存储结构,分片数可根据需要灵活设置,通过扩大分片数可提高基数统计的准确度。数据经过过滤装置首先将原始值通过hash算法计算其long类型的hash值,将该long型数值转化得到原始值在roaringbitmap的index值。在执行基数统计时将原始值批量发送到过滤装置中,判断原始值对应的index值是否在过滤装置中已存在,并过滤掉其中已存在的基数值,然后统计不存在的基数数量更新到db中从而实现基数统计。这种实现方式不需要存储原始基数值并且通过hash计算roaringbitmap的index位置,也不需要维护原始基数值与index的映射关系,从而可以大幅度节省内存,提高程序写入和运算性能,通过扩大分片数又可以很方便的提高基数统计的准确度。

21、5.统计组下所有统计项共用一份消息数据,当运算模块接收到消息数据后会对统计消息进行展开和分组操作。展开操作即为查询统计组下所有有效统计项,提取各统计项的关联字段,为各统计项复制一份单独的消息数据并只保留其运算相关字段的过程。展开操作的目的是为了避免各统计项的后续运算逻辑相互之间产生影响。分组操作即为提取统计项的统计周期属性,依据统计周期划分时间窗口并按时间窗口对展开操作后的消息进行分组;然后判断统计项是否包含多个统计运算单元,如果包含多个统计运算单元则按统计运算单元进行再分组;最后判断统计项是否包含维度属性,如果包含维度属性则提取维度信息并按维度进行再分组。分组操作的目的在于将统计运算过程进行分解,将同类型消息聚合处理,不同类型的消息运算过程互不影响。

22、6.为了避免因为某个大数量的统计需求的突然接入或某个统计项的流量暴涨而导致系统的不稳定,系统具有限流保护机制,限流保护机制包含两个方面:一是对统计组原始消息数据量限流,二是对统计项结果量的限流。统计组消息量限流是针对当前统计组单位时间窗口内统计消息数量的限流策略,如果触发该限流策略会对当前统计组下的所有统计项产生影响,统计项结果量的限流是针对当前统计项单位时间窗口内统计结果数量的限流策略,如果触发该限流策略只会对当前统计项产生影响,通过限流保护机制可以更好的保障整体服务的稳定性,限流阈值可以通过web端灵活调整,系统限流装置具有自动恢复功能,当数据量下降低于阈值后统计任务可自动恢复。

23、7.针对流式统计这类场景由于统计结果的数据结构key均为包含时间参数的数值,value为统计结果数值,这种数据结构具有普遍相似性。在数据量巨大的情况下为了提升数据的写入效率并减少存储资源的浪费,本发明的统计结果数据存储采用delta时间戳压缩的方式。系统将以秒和分钟为计算周期的结果数据以小时为粒度划分成不同的时段,将每个统计项相同维度下的相同时段内的多个统计结果数值存储在不同的column内,同一时段内的数据使用相同的key,这种设计可以减少key值的重复,在数据量巨大的场景下可以明显减少db的写入量。

24、8.本发明的client模块具有超时熔断、异常熔断的保护机制,client模块内置异常计数装置以及自动恢复组件,当业务方在调用client模块的接口出现异常并已达到熔断阈值时系统执行熔断操作。接口熔断后自动抛弃统计消息的发送,熔断时长达到时间阈值后自动恢复,这种实现方式可最大化的保障接入方自身服务的稳定性。

25、与现有技术相比,本发明所提供的描述流式统计运算方式的配置方法具有功能强大、易于扩展、语法简洁清晰、便于理解和使用的优点,即便没有技术背景的人员也依然可以很好的使用该方法。基于该配置方法实现的通用型流式大数据统计系统,占用资源少、运算性能高、系统运行更加稳定。通过简单的页面配置和数据接入即可应对繁杂的流式数据统计需求,可以大大减少企业在流式统计方面的研发成本和数据维护成本,缩短企业研发周期辅助产品的快速迭代,此外本发明也降低了中小企业使用流式大数据统计的技术门槛具有比较高的实际应用价值。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1