一种积分权益实时确定方法、装置、介质、设备和系统与流程

文档序号:26266600发布日期:2021-08-13 19:19阅读:180来源:国知局
一种积分权益实时确定方法、装置、介质、设备和系统与流程

本发明涉及大数据实时计算领域,具体涉及一种积分权益实时确定方法、装置、介质、设备和系统。



背景技术:

积分权益系统目前已经成为了电商平台、营销系统的主要支撑子系统。金融机构通过发布一个活动,可以对现存用户进行二次营销,用户在进行完成活动任务后,系统会生成积分和权益领取的通知,可以有效的粘合用户。由于现在客户群体规模的庞大,活动礼品力度的增大,经常会带来大量用户人群的在线抢购,从而对系统提出了高并发、低延迟和高吞吐的要求。

但是现有技术主要采用spark大数据计算平台和redis进行开发,在实现本发明过程中,发明人发现现有技术中至少存在如下问题:高延迟,低吞吐等性能问题。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种积分权益实时确定方法、装置、介质、设备和系统,以解决现有技术中高延迟,低吞吐等性能问题。

第一方面,本发明实施例提供了一种积分权益实时确定方法,其包括:

读取数据库中的事件表和任务表;

将读取到的所述事件表和所述任务表存入flink表中;

监听redis中的消息队列,发现最新发布的事件和任务,实时更新所述flink表中的事件表和任务表;

监听kafka配置的主题,根据所述主题从所述kafka中获取用户交易数据;

将所述用户交易数据存入到hbase中,其中,每个主题对应hbase中的一张表;

根据所述主题从所述事件表中查询事件过滤表达式,根据所述事件过滤表达式过滤kafka中发送过来的用户交易数据,获得过滤后的用户交易数据,根据所述事件的主键信息从redis中查询出与所述过滤后的用户交易数据关联的活动;

根据所述过滤后的用户交易数据关联的活动和所述flink表中的任务表中查询所述活动下的所有任务,将查询到的所述活动下的所有任务复制为多条任务数据流;

对生成的多条任务数据流分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态;

进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,将达标结果发送到kafka上。

在一些可能的实施方式中,所述的根据所述过滤后的用户交易数据关联的活动和所述flink表中的任务表中查询所述活动下的所有任务,将查询到的所述活动下的所有任务复制为多条任务数据流,具体包括:

根据所述活动是否配置了白名单并且客户是否属于白名单客户来执行数据拆分;

如果所述活动配置了白名单且所述客户属于白名单客户,则从kafka上接收用户交易数据中获取活动id,再根据所述活动id从所述flink表中的任务表中查询所述活动下的所有任务,将查询到的所述活动下的所有任务复制为多条任务数据流;

如果所述活动未配置白名单,则先判断客户接受服务的单位与活动发布的单位是否匹配;

如果所述客户接受服务的单位与所述活动发布的单位匹配时,则从kafka上接收的用户交易数据中获取活动id,再根据所述活动id从所述flink表的任务表中查询所述活动下的所有任务,将查询到的所述活动下的所有任务复制为多条任务数据流。

在一些可能的实施方式中,在所述的对生成的多条任务数据流,分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态之后,还包括:

如果所述任务涉及到累计金额和任务达标次数的规则,则保存中间结果至所述redis中;如果所述任务已经达标,则将达标的任务信息保存所述redis中。

在一些可能的实施方式中,在所述的对生成的多条任务数据流,分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态之后,还包括:

在所述每个任务达标后,将所述每个任务对应的达标任务信息保存至hbase对应的表中。

在一些可能的实施方式中,在所述的进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,将达标结果发送到kafka上之后,还包括:

在任务组达标后,将达标的任务组信息存入所述kafka和所述hbase,同时清理所述任务组下达标的客户对应的任务信息。

在一些可能的实施方式中,所述进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,具体包括:

根据预先配置的达标规则表达式,将所述任务组中的多个任务转换成逻辑表达式;

根据所述逻辑表达式中的多个字段名称,从kafka中和redis中分别获取对应的交易信息,根据所述交易信息确定每个字段对应的值;

将所述每个字段的值代入到所述达标规则表达式中进行计算,得到真或者假的结果,其中,结果为真代表本次活动达标,结果为假代表本次活动未达标。

第二方面,本发明实施例提供了一种积分权益实时确定装置,其包括:

读取模块,用于读取数据库中的事件表和任务表;

第一存入模块,用于将读取到的所述事件表和所述任务表存入flink表中;

第一监听模块,用于监听redis中的消息队列,发现最新发布的事件和任务,实时更新所述flink表中的事件表和任务表;

第二监听模块,监听kafka配置的主题,根据所述主题从所述kafka中获取用户交易数据;

第二存入模块,用于将所述用户交易数据存入到hbase中,其中,每个主题对应hbase中的一张表;

活动查询模块,用于根据所述主题从redis中查询事件过滤表达式,根据所述事件过滤表达式对应的过滤条件过滤kafka中发送过来的用户交易数据,获得过滤后的用户交易数据,根据所述事件的主键信息从redis中查询出与所述过滤后的用户交易数据关联的活动;

任务复制模块,用于根据所述与有效用户数据关联的活动和所述flink表中的任务表中查询所述活动下的所有任务,将查询到的所述活动下的所有任务复制为多条任务数据流;

第一计算模块,用于对生成的多条任务数据流,分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态;

第二计算模块,用于进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,将达标结果发送到kafka上。

第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上所述的任意一种积分权益实时确定方法。

第四方面,提供一种计算机设备,其包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上所述的任意一种积分权益实时确定方法。

第五方面,提供一种积分权益实时确定系统,其包括:

执行上述任意一种积分权益实时确定方法的flink实时计算平台,用于从第一分布式发布订阅消息系统kafka接入数据源,通过api调用规则引擎,以及将处理完的数据保存到第二分布式发布订阅消息系统kafka;

第一分布式发布订阅消息系统kafka,与所述flink实时计算平台连接,用于向所述flink实时计算平台接入数据源;

第二分布式发布订阅消息系统kafka,与所述flink实时计算平台连接,用于保存所述flink实时计算平台处理完的数据;

数据结构存储系统redis,用于保存中间结果、达标的任务信息以及基础配置信息;以及,

规则引擎,用于存储积分权益计算所需的规则;

积分权益系统管理端,用于将包含事件过滤表达式的基础配置信息存入redis,接受达标结果,发放权益或者增加积分。

上述技术方案具有如下有益效果:本发明实施例采用了flink新一代大数据计算平台进行开发,解决了低延迟的问题。通过将读取到的事件和活动配置表信息存入flink的表中,有利于方便在本地进行快速查询,减少网络传输。flink新一代大数据计算平台实时计算带来了低延迟,可以快速地计算出用户的积分和权益达标的中间状态结果,并且能够实现高吞吐性能,达到每秒钟上万笔交易的规则计算。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例的一种积分权益实时确定引擎的功能框图;

图2是本发明实施例的一种积分权益实时确定方法的整体流程图;

图3是本发明实施例的一种积分权益实时确定方法的具体流程图;

图4是本发明实施例的一种积分权益实时确定装置的功能框图;

图5是本发明实施例的一种计算机设备的功能框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

以下首先对相关技术术语进行定义和解释:

flink:apache下的一个开源的基于流的有状态计算框架。它是分布式地执行的,具备低延迟、高吞吐的优秀性能,并且非常擅长处理有状态的复杂计算逻辑场景。

flinksql:是flink实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准sql语义的开发语言。

checkpoint:checkpoint是flink实现容错机制最核心的功能,它能够根据配置周期性将计算过程产生的中间状态值生成快照,从而保证数据的持久化保存。

exactly-once:精确一次,表示一条消息从其消费到后续的处理成功,只会发生一次。

redis:是一个开源(bsd许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

kafka:是一种高吞吐量的分布式发布订阅消息系统。

hbase:是一个分布式文件系统,主要处理的是大数据存储的对象,应用于事务性的数据操作,例如数据的增、删、改。

api:(applicationprogramminginterface,应用程序接口)是一些预先定义的接口(如函数、http接口等)。

本发明实施例主要应用于按照一定的积分权益规则,对用户的交易行为进行实时计算分析的场景。

发明人在实现本发明的过程中发现,现有技术中存在如下不足:(1)高延迟,低吞吐等性能问题;(2)数据会出现重复计算的问题;(3)无法进行多数据源关联计算;(4)数据存储占用资源大;(5)积分权益规则设计复杂。本发明实施例的技术方案将解决上述任意的一个或多个技术问题。

本发明实施例采用了flink新一代大数据计算平台进行开发,解决了低延迟的问题,同时利用flinksql进行了多数据源的整合计算,基于checkpoint机制保证了数据的备份,进而实现了exactly-once的方案,保证了数据不会被重复消费的问题。

实施例一

图1是本发明实施例的积分权益实时确定引擎的功能框图。如图1所示,其主要包括如下模块:

flink实时计算平台:

flink被称为第三代大数据处理方案,具备低延迟,高吞吐,高性能,以及exactly-once语义流数据处理的优势。本发明实施例也是基于flink的这些优势,利用流式计算的实时计算api,采用多线程模型的计算,利用yarn的部署方案进行计算单元的资源申请。同时封装了配置文件读取,将本发明实施例的一些配置功能移植到yaml(其是一个可读性高,用来表达数据序列化的格式)配置文件中,针对并行度,flink的一些优化设置也进行了开关化的设计,例如,在flink中增加一个定时任务,针对flink中存储的一些活动信息,这些活动信息是总在发生变化的,比如说某个活动是一个月的,但是针对实际情况需要修改为两个月,那么就会通过定时任务定时的判断任务是否发生变化,如果有就随时进行更新,贴合产品化的设计理念。

多数据源关联计算:

利用flinksql系列的api,实现对多数据源的流式数据的内存表存储,因为是流式数据并且在关联操作后即可清除,所以占用资源不是很多,但是可以通过flinksql的方式来操作数据。关联后的数据转换成flink的流式数据集合,可以复用后续的计算逻辑。

中间状态结果的保存:

积分权益计算,并不是针对某个用户一笔的交易就可以计算完成的,大部分都是需要在一定时间范围内,多次的交易数据进行统计分析得出,所以需要对这些数据的中间状态结果进行保存。但是为了防止数据的重复计算问题,本发明实施例应用了flink的checkpoint机制,进行批量处理结果的镜像保存,一旦出现了问题,可以从最近的时间点进行恢复,而恢复的数据也都是已经计算完成的数据,对于部分计算完成但是没有保存的数据,因为没有最终存储到外部系统,所以在flink内部执行重新计算时,并不会造成业务数据的不一致性。

exactly-once的解决方案:

flink对kafka有exactly-once成熟的解决方案,本发明实施例的数据源、数据存储也均是基于kafka的设计,配合flink的checkpoint机制,可以有效的控制kafka上的数据的消费和生产。同时,为了更高保证数据的重复消费问题,在计算过程采用了幂等(对于多次写操作的交易请求,最终的结果都是一致的,主要解决的就是重复提交导致的数据重复计算的问题)的类似设计。

规则引擎的设计:

积分权益计算,需要设定一定的规则,例如:

事件过滤表达式:

eventrule('表达式1,表达式2......',eventfields(参数1,参数2......)),

任务表达式:

taskrule('表达式1,表达式2...',taskfields('参数1,参数2...','是否金额累计','累计周期','是否有子任务表达式'))

上述表达式中,eventrule代表的是用户的交易数据是否满足活动的要求的规则,eventfields代表的是从kafka中的哪个字段获取值。taskrule是任务能否达标的逻辑规则;taskfields包括:1、从kafka中的哪些字段获取数据;2、如果是金额累计,那么将这些字段进行flink累计操作,并存储在redis中。

只要符合以上配置要求的积分权益,本发明实施例均会自动解析,从kafka上消费数据并进行字段的识别,并代入到规则引擎中执行计算。

redis数据缓存:

为了减轻flink的存储压力,充分利用了redis的五种基本数据结构进行设计,对规则的设置,白名单用户,单位的数据权限,任务组数据,任务数据,事件数据等都进行了存储。在保证合理性,可扩展性等前提下,尽量采用时间复杂度更小的api操作,同时对数据清理检索方式也进行了主键名称的设计(例如主键设计成task:20210525)。

数据清理的定时任务:

根据活动设置的有效时间,对与活动相关的初始数据和中间数据,都会进行t+2日的数据清理,之所以不是t+1,是为了保证数据的跨日问题。

在图1中,积分权益系统管理端将事件表达式等基础配置信息存入redis,flink实现数据源接入,flink通过api调用规则引擎,flink处理完的数据保存到kafka,活动达标数据放入kafka指定的topic。

图2是本发明实施例的一种积分权益实时确定方法的流程图。如图2所示,其包括如下步骤:

s101、读取数据库中的事件表和任务表;

具体地,事件表中包含多个事件,每个事件定义的是要从用户的哪种交易数据中的哪些字段获取需要进行权益积分计算的信息和事件过滤表达式;任务表定义的是金融机构发布的多种营销活动,其中包括:活动开始的时间,结束时间,活动归属的金融机构等。

s102、将读取到的事件表和任务表存入flink表中;

s103、监听redis中的消息队列,发现最新发布的事件和任务,实时更新flink表中的事件表和任务表;

s104、监听kafka配置的主题,从该主题中获取用户交易数据;

具体的,kafka有多种主题,每种主题的消息都不一样,其中消息包括用户交易数据,用户交易数据中对应有活动的标识id,不同的活动对应有不同的id。

s105、将用户数据交易存入对应的hbase中,其中kafka中每个主题对应hbase中的一张表;

具体地,hbase中存储的是kafka中不同主题下的原始数据,比如手机银行交易流水表,内容是用户在手机端进行的各种缴费记录和/或转账记录等。

s106、根据主题从redis中查询事件过滤表达式,根据该事件过滤表达式对应的过滤条件过滤kafka中发送过来的用户交易数据,获得过滤后的用户交易数据,根据事件的主键信息从redis中查询出与过滤后的用户交易数据关联的活动;

作为一个示例,例如事件过滤表达式中要求kafka中的充值缴费字段的值必须大于100元的交易数据,然后根据该交易数据的主键信息从redis中查询出与该交易数据关联的活动。

具体地,主题是kafka中用来存储消息的逻辑概念,根据主题从redis中对应查找事件过滤表达式。主题在kafka中是设定的一个名称。提取消息的时候,会指定主题名称,根据指定的主题名称就知道应该消费的是kafka中哪部分下的消息。

具体地,通过kafka中配置的主题,从redis中获取对应的事件过滤表达式。例如redis中存储的数据是键-值(key-value)的数据类型,键:kafka主题名称,值:充值缴费大于或等于100元并且一个月充值缴费大于或等于3次。通过kafka中的主题名称,就能从redis中获取到事件过滤表达式。

具体地,在根据该事件过滤表达式对应的过滤条件过滤kafka中发送过来的用户交易数据之后,得到的结果是true或者false,也就是用户的交易数据是否达到了该事件过滤表达式的要求,如果得到的结果是ture,就获得过滤后的用户交易数据,也就是通过了过滤表达式的用户交易数据。

具体地,主键信息指的是唯一id。事件包括kafka的主题、需要进行积分权益计算的数据、时间等。主键信息是在积分权益管理系统中生成的值,并将其存储到了redis中。

s107、根据kafka中的用户交易数据和flink表中的任务表查询活动下的所有任务,将查询到的活动下的所有任务复制为多条任务数据流;

具体地,该话动包括前述的最新发布的活动和关联的活动,当kafka中有了新的用户交易数据,会查询所有活动来进行匹配。

s108、对生成的多条任务数据流,分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态;

s109、进行任务组达标规则计算,当任务组中的多个任务都已经完成时,确定本次活动已经达标,将达标结果发送到kafka上。

在一些实施例中,步骤s107中根据kafka消息和flink表查询活动下的所有任务,将查询到的活动下的所有任务复制为多条任务数据流具体可以包括:根据活动是否配置了白名单并且客户是否属于白名单客户来执行数据拆分;如果活动配置了白名单且客户在白名单中属于白名单客户,则从kafka上接收的用户数据交易中获取活动id,再根据该活动id从flink表中查询该活动下的所有任务,将查询到的该活动下的所有任务复制为多条任务数据流;如果活动未配置白名单,则先判断客户接受服务的单位与活动发布的单位是否匹配;如果客户接受服务的单位与活动发布的单位匹配时,则从kafka上接收的用户交易数据中获取活动id,再根据该活动id从flink表中查询活动下的所有任务,将查询到的活动下的所有任务复制为多条任务数据流。

在一些实施例中,在步骤s108进行任务达标规则计算之后,还可以包括:如果任务涉及到累计金额和任务达标次数的规则,则保存中间结果至redis;如果任务已经达标,则将达标的任务信息保存在redis中。作为一个举例,累计金额和任务达标次数例如为:任务要求在一个月内,用户需要进行生活缴费金额累计达到500元,或者用户需要进行三次以上的生活缴费操作。具体地,中间结果是flink计算产生的,比如事件过滤表达式中要求一个月需要生活缴费大于或者等于3次,那么当kafka中产生一条生活缴费的记录,那么flink就需要累加一次,这个累加的结果就是中间结果。

在一些实施例中,在步骤s108进行任务达标规则计算之后,还可以包括:在任务达标后,将对应的达标任务信息保存至hbase中,hbase中存在多张表,每一个表对应一个主题,每个主题下都存在与主题对应的用户交易数据,用户交易数据所属于的主题在hbase中对应哪一个表,就将达标任务信息保存在这个对应的表中。这样通过保存原始数据便于后面问题的追踪。

在一些实施例中,在步骤s109进行任务组达标规则计算之后,还可以包括:在任务组达标后,将达标的任务组信息存入kafka和hbase,同时清理任务组下达标的客户对应的任务信息。存入kafka,是为了积分权益管理系统能够接收到达标数据,并进行后续的权益发放;存入hbase,是为了保留原始数据,方便后续问题的追踪;清理任务组下达标的客户对应的任务信息,避免占用内存,浪费存储资源。

在一些实施例中,步骤s109中进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,具体包括:

根据预先配置的达标规则表达式,将任务组中的多个任务转换成逻辑与和逻辑或的逻辑表达式;

根据逻辑与和逻辑或的表达式中的多个字段名称,从kafka中和redis中分别获取对应的交易信息,根据交易信息确定每个字段对应的值;

将每个字段的值代入到达标规则表达式中进行计算,得到真或者假的结果,其中,结果为真代表本次活动达标,结果为假代表本次活动未达标。

作为一个示例,例如生活缴费活动中的一个任务组,包含两项任务,一是一个月内生活缴费金额为500元,二是一个月内必须完成三次生活缴费的交易。那么生成的达标规则表达式就是“金额大于或等于500并且缴费次数大于或等于3”,其中金额和缴费次数分别对应kafka中用户交易数据中的两个字段。当用户在完成活动任务过程中,系统会对每笔交易的数据进行累加,比如用户第一次充值电费100元,那么系统记录金额为100,缴费次数为1,并存储在redis中,当第二次充值水费200元,那么更新redis的累计值,金额为300,缴费次数为2,依次类推。每次从kafka中获取该活动的交易数据,都会进行一次达标规则表达式的判断,也就是“金额大于或等于500并且缴费次数大于或等于3”,如果满足这个表达式,结果就为真,代表达标;如果不满足这个表达式,结果就为假,达标不达标。

以下结合应用场景和具体案例对上述方法进行更加详细的说明:

图2是本发明实施例的积分权益实时计算方法的具体流程图。如图2所示,该方法具体可包括如下步骤:

步骤s1:启动时候,读取数据库中事件表、任务表。

步骤s2:将读取到的事件表和任务表信息存入flink的表中,这样能够方便在本地进行快速查询,减少网络传输。

步骤s3:启动的同时,会监听redis中的消息队列,发现最新发布的事件和任务,实时更新flink表中的事件表和任务表。

步骤s4:启动的同时,会监听kafka配置的topic(主题),每个主题都有多个分组,从每个分组中获取kafka中的用户交易数据。

步骤s5:将监听到的kafka消息存入各自对应的hbase表中,该消息即为用户的交易数据,通过保存原始数据,方便后面问题的追踪。

步骤s6:根据topic主题,从redis中查询事件过滤表达式,根据该事件过滤表达式对应的过滤的条件,例如交易金额是否有值,时间是否在计算范围等,过滤数据,并且查询出与过滤后的数据相关联的活动。上述事件过滤表达式与topic主题是多对多的关系,并且存储在redis中,同步到flink里。

步骤s7:数据拆分:按照客户是否属于白名单客户且活动有白名单设置。白名单是金融单位配置的部分用户信息,通过接口调用,发送到redis当中。创建活动的时候,会指定白名单用户,也可以不指定。根据客户是否在白名单,将数据拆分成了两部分。

步骤s8:如果活动配置了白名单且该客户在白名单中,首先从kafka上接收的消息中获取活动id,然后再根据该活动id从flink表中查询该活动下的所有任务,复制为多条任务数据流。

具体地,如果活动配置了白名单且该客户在白名单中,则可以参加所有的活动,不需要进行机构的匹配。则直接执行步骤s10根据活动id查询该活动下的所有任务,复制为多条任务数据流。

步骤s9:如果活动未配置白名单,则先判断客户接受服务的单位(客户机构)和活动发布的单位(活动机构)是否匹配。如果客户机构和活动机构匹配时,执行步骤s10。

步骤s10:根据活动id查询该活动下的所有任务,复制为多条任务数据流;否则,丢弃该条数据。如果机构不匹配,则此次计算任务结束。

步骤s11:根据生成的多条任务数据流,进行任务达标规则计算。具体地,生成多条的任务数据流,会分别进行相应的任务达标规则计算,结果是每个任务是否完成的状态,如果完成任务,则保存在flink中。例如任务id:用户id完成次数;如果没有完成,则不记录。

步骤s12:如果该任务涉及到累计金额、任务达标次数的规则,则保存中间结果至redis;如果该任务已经达标,则将达标的任务信息保存在redis中。

步骤s13:任务达标后,将客户对应的达标任务信息保存至hbase对应的表中。

步骤s14:任务组达标规则计算。具体地,最后进行任务组达标规则计算,任务组下有多个任务,根据多个任务的完成情况,进行达标规则的判断,得出任务组是否完成的状态。如果任务组的任务都已经完成,那么此次活动就算已经达标,会直接将达标结果发送到kafka上,由积分权益系统管理端接受并发放权益或者增加积分。

确定每个任务是否达标具体可以包括如下步骤:首先,根据系统配置的达标规则表达式,转换成逻辑表达式;其次,根据表达式中的字段名称,分别从kafka信息中获取相应任务组的达标结果和redis中对应的中间结果;最后,将这些字段的值代入到达标规则中进行计算,得到真或者假来确定是否达标。

步骤s15:任务组达标后,将达标的任务组信息存入kafka和hbase,同时清理该任务组下达标的客户对应的任务信息。存入kafka,是为了积分权益管理系统能够接收到达标数据,并进行后续的权益发放;存入hbase,是为了保留原始数据,方便后续问题的追踪;清理该任务组下达标的客户对应的任务信息,避免占用内存,浪费存储资源。

本发明实施例的上述技术方案具有如下有益技术效果:

1、实时计算带来了低延迟,可以快速地计算出用户的积分和权益达标的中间状态结果;

2、高吞吐性能,达到了每秒钟上万笔交易的规则计算;

3、多数据源的关联计算,利用flinksql实现了简单的关联检索;

4、exactly-once的解决方案,极大程度上保证了数据的一致性;

5、资源的有效利用,节省了数据的存储和过期数据清理;

6、灵活的规则配置,无需修改代码,可以自动识别新设定的积分权益计算规则。

7、通过将读取到的事件和活动配置表信息存入flink的表中,有利于方便在本地进行快速查询,减少网络传输。

8、通过将监听到的kafka消息存入各自对应的hbase中,该消息即为用户的交易数据,保存原始数据可方便后面问题的追踪。

实施例二

图4是本发明实施例的一种积分权益实时确定装置的功能框图。如图4所示,其该装置200包括:

读取模块201,用于读取数据库中的事件表和任务表;

第一存入模块202,用于将读取到的事件表和任务表存入flink表中;

第一监听模块203,用于监听redis中的消息队列,发现最新发布的事件和任务,实时更新flink表中的事件表和任务表;

第二监听模块204,用于监听kafka配置的主题,根据所述主题从kafka中获取用户交易数据;

第二存入模块205,用于将用户交易数据存入到hbase中,其中,每个主题对应hbase中的一张表;

活动查询模块206,用于根据主题从redis中查询事件过滤表达式,根据所述事件过滤表达式对应的过滤条件过滤kafka中发送过来的用户交易数据,获得过滤后的用户交易数据,根据事件的主键信息从redis中查询出与过滤后的用户交易数据关联的活动;

任务复制模块207,用于根据所述与过滤后的用户交易数据关联的活动和flink表中的任务表中查询活动下的所有任务,将查询到的活动下的所有任务复制为多条任务数据流;

第一计算模块208,用于对生成的多条任务数据流,分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态;

第二计算模块209,用于进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,将达标结果发送到kafka上。

本发明实施例的有益技术效果包括:

实现了高吞吐的积分权益计算引擎,达到了每秒钟上万笔交易的规则计算;

实现了准实时的规则计算引擎,可以快速的计算出用户的积分权益结果;

在多个大数据源中基于流式计算找到相互关联的数据,通过部分加载等待机制进行数据的匹配,节省内存的存储,同时效率更高;

保证交易数据只会进行一次计算,不会出现重复计算或者漏计算的情况;

灵活定制积分权益的计算规则,本发明实施例会自动识别进行新规则的计算,而无需代码开发。

重新定义了数据存储结构,可以简化并有效使用硬件资源。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

实施例三

本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现如下步骤:

读取数据库中的事件表和任务表;

将读取到的事件表和任务表存入flink表中;

监听redis中的消息队列,发现最新发布的事件和任务,实时更新flink表中的事件表和任务表;

监听kafka配置的主题,根据主题从所述kafka中获取用户交易数据;

将所述用户交易数据存入到hbase中,其中,每个主题对应hbase中的一张表;

根据主题从事件表中查询事件过滤表达式,根据事件过滤表达式过滤kafka中发送过来的用户交易数据,获得过滤后的用户交易数据,根据事件的主键信息从redis中查询出与所述过滤后的用户交易数据关联的活动;

根据与过滤后用户交易数据关联的活动和flink表中的任务表中查询活动下的所有任务,将查询到的活动下的所有任务复制为多条任务数据流;

对生成的多条任务数据流分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态;

进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,将达标结果发送到kafka上。

所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

实施例四

本发明实施例还提供了一种电子设备,如图5所示,包括一个或多个处理器301、通信接口302、存储器303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信。

存储器303,用于存放计算机程序;

处理器301,用于执行存储器303上所存放的程序时,实现:

读取数据库中的事件表和任务表;

将读取到的事件表和任务表存入flink表中;

监听redis中的消息队列,发现最新发布的事件和任务,实时更新flink表中的事件表和任务表;

监听kafka配置的主题,根据主题从所述kafka中获取用户交易数据;

将所述用户交易数据存入到hbase中,其中,每个主题对应hbase中的一张表用户交易数据;

根据主题从事件表中查询事件过滤表达式,根据事件过滤表达式过滤kafka中发送过来的用户交易数据,获得过滤后的用户交易数据,根据事件的主键信息从redis中查询出与所述过滤后的用户交易数据关联的活动;

根据与过滤后的用户交易数据关联的活动和flink表中的任务表中查询活动下的所有任务,将查询到的活动下的所有任务复制为多条任务数据流;

对生成的多条任务数据流分别进行相应的任务达标规则计算,以确定每个任务是否处于完成状态;

进行任务组达标规则计算,当任务组中的多个任务都已经完成时确定本次活动已经达标,将达标结果发送到kafka上。

上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。

总线304包括硬件、软件或两者,用于将上述部件彼此耦接在一起。举例来说,总线可包括加速图形端口(agp)或其他图形总线、增强工业标准架构(eisa)总线、前端总线(fsb)、超传输(ht)互连、工业标准架构(isa)总线、无限带宽互连、低引脚数(lpc)总线、存储器总线、微信道架构(mca)总线、外围组件互连(pci)总线、pci-express(pci-x)总线、串行高级技术附件(sata)总线、视频电子标准协会局部(vlb)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。

存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

存储器303可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器303可包括硬盘驱动器(harddiskdrive,hdd)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(universalserialbus,usb)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器303可包括可移除或不可移除(或固定)的介质。在特定实施例中,存储器303是非易失性固态存储器。在特定实施例中,存储器303包括只读存储器(rom)。在合适的情况下,该rom可以是掩模编程的rom、可编程rom(prom)、可擦除prom(eprom)、电可擦除prom(eeprom)、电可改写rom(earom)或闪存或者两个或更多个以上这些的组合。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备及可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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