一种数据处理方法及数据处理装置与流程

文档序号:17318637发布日期:2019-04-05 21:25阅读:115来源:国知局
一种数据处理方法及数据处理装置与流程

本发明涉及互联网通信领域,特别涉及一种数据处理方法及数据处理装置。



背景技术:

随着智能手机的越来越普及,微信已经成为了当下最流行的互联网聊天工具之一,与此同时,微信营销作为新型的互联网营销方式应运而生。微信公众平台提供了两种方式,让微信公众号拥有者可以获得该公众号运营相关的指标数据。一种是提供应用程序api接口,用户通过直接调用api接口可以获取到粉丝信息、群发图文的阅读、收藏、分享数等;另一种是事件消息推送方式,主要指微信会将用户点击菜单事件、关注/取消关注事件、扫码事件等事件信息发送给公众号开发者指定的接收服务器上,微信的推送事件消息是被推送到指定服务器的kafka队列中的。

现有技术中,从kafka队列中消费某个topic的数据的方式,是使用指定smallest方式或largest方式。smallest方式是指每次从kafka队列中消费某个topic的数据时均是从最小的偏移量开始消费,而largest方式则是指每次从kafka队列中消费某个topic的数据时均是从最大的偏移量开始消费。

但是现有技术中的消费方式要求消费程序必须与kafka集群保持连接,如果不小心断开连接,则smallest方式会对原来已经获取的数据重新进行消费一遍,带来不必要的消耗;而largest方式会丢失掉从断开连接到重新连接这段时间内被推送过来的数据。



技术实现要素:

本发明实施例提供了一种数据处理方法及其相关装置,用于在数据处理装置与kafka集群断开的情况下,避免用smallest方式消费消费主题时所产生的重复消费数据的问题,以及用largest方式消费消费主题时数据丢失的问题。

有鉴于此,本发明第一方面提供一种数据处理方法,具体包括:

获取目标消费主题;

判断获取的所述目标消费主题是否存在于预置的数据状态记录表中,其中,所述数据状态记录表中记录有已消费的消费主题以及对应的消费记录;

若存在,则在所述数据状态记录表中查找与所述目标消费主题对应的消费记录,从消息队列中获取与所述目标消费主题对应的消费数据,并在所述数据状态记录表中更新所述目标消费主题所对应的消费记录;

若不存在,则从所述消息队列中依次获取与所述目标消费主题对应的消费数据,并将所述目标消费主题的消费信息记录入所述数据状态记录表中。

本发明第二方面提供一种数据处理装置,具体包括:

获取模块,用于获取目标消费主题;

判断模块,用于判断获取的所述目标消费主题是否存在于预置的数据状态记录表中,其中,所述数据状态记录表中记录有已消费的消费主题以及对应的消费记录;

第一获取模块,用于当所述目标消费主题存在于所述数据状态记录表中时,在所述数据状态记录表中查找与所述目标消费主题对应的消费记录,从消息队列中获取与所述目标消费主题对应的消费数据,并在所述数据状态记录表中更新所述目标消费主题所对应的消费记录;

第二获取模块,用于当所述目标消费主题不存在于所述数据状态记录表中时,从所述消息队列中依次获取与所述目标消费主题对应的消费数据,并将所述目标消费主题的消费信息记录入所述数据状态记录表中。

本发明实施例第三方面提供了一种数据处理装置,具体包括:

至少一个处理器和至少一个存储器,至少一个存储器中存储有指令,以使至少一个处理器能够:

获取目标消费主题;

判断获取的所述目标消费主题是否存在于预置的数据状态记录表中,其中,所述数据状态记录表中记录有已消费的消费主题以及对应的消费记录;

若存在,则在所述数据状态记录表中查找与所述目标消费主题对应的消费记录,从消息队列中获取与所述目标消费主题对应的消费数据,并在所述数据状态记录表中更新所述目标消费主题所对应的消费记录;

若不存在,则从所述消息队列中依次获取与所述目标消费主题对应的消费数据,并将所述目标消费主题的消费信息记录入所述数据状态记录表中。

从以上技术方案可以看出,本发明实施例具有以下优点:

本发明实施例中,数据处理装置获取目标消费主题;然后判断获取的所述目标消费主题是否存在于预置的数据状态记录表中,其中,所述数据状态记录表中记录有已消费的消费主题以及对应的消费记录;若存在,则在所述数据状态记录表中查找与所述目标消费主题对应的消费记录,从消息队列中获取与所述目标消费主题对应的消费数据,并在所述数据状态记录表中更新所述目标消费主题所对应的消费记录;若不存在,则从所述消息队列中依次获取与所述目标消费主题对应的消费数据,并将所述目标消费主题的消费信息记录入所述数据状态记录表中。本发明实施例中,数据处理装置中预置有数据状态记录表,装置会根据表中的记录对消费主题进行消费,当数据处理装置与kafka集群断开时,可以解决用smallest方式消费消费主题时所产生的重复消费数据的问题,以及用largest方式消费消费主题时数据丢失的问题。

附图说明

图1为本发明实施例数据处理方法一个实施例示意图;

图2为本发明实施例数据处理装置一个实施例示意图;

图3为本发明实施例数据处理装置另一个实施例示意图。

具体实施方式

本发明实施例提供了一种数据处理方法及数据处理装置,用于在数据处理装置与kafka集群断开的情况下,避免用smallest方式消费消费主题时所产生的重复消费数据的问题,以及用largest方式消费消费主题时数据丢失的问题。

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

请参阅图1,本发明实施例中数据处理方法一个实施例包括:

101、获取目标消费主题。

本实施例中,数据处理装置获取需要获取的消费数据所对应的目标消费主题。

102、判断获取的目标消费主题是否存在于预置的数据状态记录表中,若存在,则执行步骤103至106,若不存在,则执行步骤107至108。

本实施例中,当数据处理装置获取到目标消费主题之后,会判断获取到的目标消费主题是否存在于预置的数据状态记录表中,数据状态记录表中记录有已消费的消费主题对应的消费记录,其中,消费记录可以包括,已消费的消费主题的名称、已消费的消费主题的分区信息、已消费的消费主题的偏移量和已消费的消费主题中剩余的未消费的消息条数。

103、从消费记录中获取目标消费主题的分区信息及偏移量信息。

本实施例中,当在预置的数据状态记录表中查找到存在目标消费主题时,即,表明目标消费主题不是首次消费的主题数据,即目标主题数据对应的消息队列里面有部分消费数据是已经获取过了的,为了避免重复消费,需要从数据状态记录表中获取目标消费主题的分区信息以及该消费主题的偏移量信息,其中,每个消费主题一般都对应多个分区,现在要从分区信息中得到之前消费过的分区,偏移量信息反映了该消费主题中消息队列的消费进程,即,消费到消息队列哪个数据,其中,本实施例中的偏移量信息为最大偏移量信息,如消息队列共有1-10,上一次消费了1-5。

104、根据目标消费主题的分区信息及偏移量信息确定目标消费主题的消费节点。

本实施例中,当从数据状态记录表中获取到了目标消费主题的分区信息以及偏移量信息之后,将会根据目标消费主题的分区信息及偏移量信息确定目标消费主题的消费节点,避免消费时候,对已消费过的信息进行重复的消费,即,假如消息队列共有1-10,上一次消费了1-5,消费节点指指定分区中消费队列的指定位置5,本方案获取为了避免重复消费数据,故从消费节点开始消费数据,从5开始获取。

105、根据消费节点从消息队列中获取消费数据。

本实施例中,当获取到了目标消费主题的消费节点之后,会从该消费节点在消息队列中的位置依次获取消息队列中未消费的消费数据。

需要说明的是,该装置中内置有消费时长,即可在配置文件中进行配置消费时长,该装置在消费时长内需要与kafka集群建立连接,消费时长可以为1分钟,也可以为其他时间长度,如30秒,具体时长视实际情况而定,具体时长此处不做限定。

在消费时长里依次消费未消费的消费数据,得到消费数据之后,将消费数据记为msgs,然后断开与kafka集群的连接。

106、更新数据状态记录表中目标消费主题的消费记录。

本实施例中,对步骤105中得到的msgs中进行解析,获取目标消费主题的分区信息和最大的偏移量信息,记为topicpartitionlargeoffset,并将该消费主题对应的分区信息和偏移量信息更新到数据状态记录表中。

107、从消息队列中依次获取与目标消费主题对应的消费数据。

本实施例中,当在预置的数据状态记录表中没有查找到目标消费主题时,则证明目标消费主题是首次消费的,此时,可以按照消费数据的偏移量大小从小到大依次进行获取,并将得到的消费数据记为msgs,然后断开与kafka集群的连接。

需要说明的是,该装置中内置有消费时长与消费的时间间隔,即可在配置文件中进行配置消费时长与消费的时间间隔,该装置在消费时长内需要与kafka集群建立连接,且在与kafka集群断开连接之后,经过配置的时间间隔之后,再次与kafka集群建立连接,其中,消费时长可以为1分钟,也可以为其他时间长度,如30秒,具体时长视实际情况而定,具体时长此处不做限定,消费的时间间隔的具体时间此处也不做限定。

108、将目标消费主题的消费信息记录入数据状态记录表中。

本实施例中,对步骤107中得到的msgs进行解析,获取该消费主题的分区信息和最大的偏移量信息,记为topicpartitionlargeoffset,并将目标消费主题对应的分区信息和偏移量信息、名称等插入数据状态记录表中。

109、对消费数据进行解析,得到消费数据的事件类型。

本实施例中,当通过步骤105或步骤107获取到msgs之后,会对该msgs进行解析,得到该消费数据的事件类型,即得到不同类型的推送事件。

110、根据事件类型存储消费数据至与事件类型相对应的数据库中。

本实施例中,当通过解析msgs的到消费数据的事件类型之后,会根据事件类型存储消费数据至与该事件类型相对应的数据库中。

111、对数据状态记录表中存储的分区信息进行刷新处理。

本实施例中,数据处理装置无法识别某个消费主题存储的分区的变化行为(比如减少或新增分区)。为了弥补这个问题,还需要一个专门的分区刷新程序,其作用是定时的去扫描某个消费主题的分区信息,如果有新增或减少则更新数据状态记录表中该消费主题的分区记录。具体步骤如下:

1)连接kafka集群,进行消费。

2)消费指定时长(可在配置文件中进行配置消费时长,比如1分钟)后,得到消费数据,记为msgs,断开与kafka集群的连接。

3)对步骤2)中得到的msgs中进行解析,获取该消费主题已分配的所有分区和对应分区的最小偏移量信息,记为topicassignedpartitionoffset。

4)获取消费主题的已有分区:从数据状态记录表中查询该消费主题的所有已存在的分区和对应偏移量信息,记为topicexistpartitionoffset。

5)插入或删除分区记录:将topicassignedpartitionoffset和topicexistpartitionoffset进行比较:

a)查找在topicassignedpartitionoffset存在,但是在topicexistpartitionoffset中不存在的消费主题的分区记录,记为topicnewpartitionoffset,将记录插入到数据状态记录表中。

b)查找在topicexistpartitionoffset存在,但是在topicassignedpartitionoffset中不存在的topic的分区记录,记为topicobsoletepartitionoffset,从数据状态记录表中删除对应的分区记录。

本发明实施例中,数据处理装置获取目标消费主题;判断获取的目标消费主题是否存在于预置的数据状态记录表中,其中,数据状态记录表中记录有已消费的消费主题以及对应的消费记录;若存在,则在数据状态记录表中查找与目标消费主题对应的消费记录,从消息队列中获取与目标消费主题对应的消费数据,并在数据状态记录表中更新目标消费主题所对应的消费记录;若不存在,则从消息队列中依次获取与目标消费主题对应的消费数据,并将目标消费主题的消费信息记录入数据状态记录表中。本发明实施例中,数据处理装置中预置有数据状态记录表,装置会根据表中的记录对消费主题进行获取,当数据处理装置与kafka集群断开时,可以解决用smallest方式获取数据时所产生的重复获取消费数据的问题,以及用largest方式获取消费主题时数据丢失的问题。

上面对本发明实施例中的数据处理方法进行了描述,下面对本发明实施例中的数据处理装置进行描述,请参阅图2,本发明实施例中的系统包括:

获取单元201,用于获取目标消费主题;

判断单元202,用于判断获取的目标消费主题是否存在于预置的数据状态记录表中,其中,数据状态记录表中记录有已消费的消费主题以及对应的消费记录;

第一获取单元203,用于当目标消费主题存在于数据状态记录表中时,在数据状态记录表中查找与目标消费主题对应的消费记录,从消息队列中获取与目标消费主题对应的消费数据,并在数据状态记录表中更新目标消费主题所对应的消费记录;

第二获取单元204,用于当目标消费主题不存在于数据状态记录表中时,从消息队列中依次获取与目标消费主题对应的消费数据,并将目标消费主题的消费信息记录入数据状态记录表中。

本发明实施例中,获取单元201获取目标消费主题;判断单元202判断获取的目标消费主题是否存在于预置的数据状态记录表中,其中,数据状态记录表中记录有已消费的消费主题以及对应的消费记录;若存在,则在数据状态记录表中查找与目标消费主题对应的消费记录,第一获取单元203从消息队列中获取与目标消费主题对应的消费数据,并在数据状态记录表中更新目标消费主题所对应的消费记录;若不存在,则第二获取单元204从消息队列中依次获取与目标消费主题对应的消费数据,并将目标消费主题的消费信息记录入数据状态记录表中。本发明实施例中,数据处理装置中预置有数据状态记录表,装置会根据表中的记录对消费主题进行获取,当数据处理装置与kafka集群断开时,可以解决用smallest方式获取数据时所产生的重复获取消费数据的问题,以及用largest方式获取消费主题时数据丢失的问题。

请参阅图3,图3为本发明实施例中数据处理装置的另一个实施例。

获取单元301,用于获取目标消费主题;

判断单元302,用于判断获取的目标消费主题是否存在于预置的数据状态记录表中,其中,数据状态记录表中记录有已消费的消费主题以及对应的消费记录;

第一获取单元303,用于当目标消费主题存在于数据状态记录表中时,在数据状态记录表中查找与目标消费主题对应的消费记录,从消息队列中获取与目标消费主题对应的消费数据,并在数据状态记录表中更新目标消费主题所对应的消费记录;

其中,第一获取单元303包括:

第一获取子单元3031,用于从消费记录中获取目标消费主题的分区信息及目标消费主题的偏移量信息;

确定子单元3032,用于根据目标消费主题的分区信息及偏移量信息确定目标消费主题的消费节点;

第二获取子单元3033,用于根据消费节点从消息队列中获取消费数据。

第二获取单元304,用于当目标消费主题不存在于数据状态记录表中时,从消息队列中依次获取与目标消费主题对应的消费数据,并将目标消费主题的消费信息记录入数据状态记录表中。

断开单元305,用于根据配置的时间间隔断开与kafka集群的连接,消息队列保存在kafka集群中。

解析单元306,用于对消费数据进行解析,得到消费数据的事件类型;

存储单元307,用于根据事件类型存储消费数据至与事件类型相对应的数据库中。

刷新单元308,用于对数据状态记录表中存储的分区信息进行刷新处理。

本发明实施例中,获取单元201获取目标消费主题;判断单元202判断获取的目标消费主题是否存在于预置的数据状态记录表中,其中,数据状态记录表中记录有已消费的消费主题以及对应的消费记录;若存在,则在数据状态记录表中查找与目标消费主题对应的消费记录,第一获取单元203从消息队列中获取与目标消费主题对应的消费数据,并在数据状态记录表中更新目标消费主题所对应的消费记录;若不存在,则第二获取单元204从消息队列中依次获取与目标消费主题对应的消费数据,并将目标消费主题的消费信息记录入数据状态记录表中。本发明实施例中,数据处理装置中预置有数据状态记录表,装置会根据表中的记录对消费主题进行获取,当数据处理装置与kafka集群断开时,可以解决用smallest方式获取数据时所产生的重复获取消费数据的问题,以及用largest方式获取消费主题时数据丢失的问题。

数据处理装置包括处理器和存储器,上述获取单元、判断单元、第一获取单元单元和第二获取单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来避免用smallest方式获取消费数据时所产生的重复消费数据的问题,以及用largest方式获取消费数据时数据丢失的问题。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram),存储器包括至少一个存储芯片。

本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现数据处理方法。

本发明实施例提供了一种处理器,处理器用于运行程序,其中,程序运行时执行数据处理方法。

本发明实施例提供了一种设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:

获取目标消费主题;

判断获取的目标消费主题是否存在于预置的数据状态记录表中,其中,数据状态记录表中记录有已消费的消费主题以及对应的消费记录;

若存在,则在数据状态记录表中查找与目标消费主题对应的消费记录,从消息队列中获取与目标消费主题对应的消费数据,并在数据状态记录表中更新目标消费主题所对应的消费记录;

若不存在,则从消息队列中依次获取与目标消费主题对应的消费数据,并将目标消费主题的消费信息记录入数据状态记录表中。

其中,从消息队列中获取与目标消费主题对应的消费数据包括:从消费记录中获取目标消费主题的分区信息及目标消费主题的偏移量信息;

根据目标消费主题的分区信息及偏移量信息确定目标消费主题的消费节点;

根据消费节点从消息队列中获取消费数据。

处理器执行程序时还用于实现:

对数据状态记录表中存储的分区信息进行刷新处理。

处理器执行程序时还用于实现:

对消费数据进行解析,得到消费数据的事件类型;

根据事件类型存储消费数据至与事件类型相对应的数据库中。

处理器执行程序时还用于实现:

根据配置的时间间隔断开与kafka集群的连接,消息队列保存在kafka集群中。

本文中的设备可以是服务器、pc、pad、手机等。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:

获取目标消费主题;

判断获取的目标消费主题是否存在于预置的数据状态记录表中,其中,数据状态记录表中记录有已消费的消费主题以及对应的消费记录;

若存在,则在数据状态记录表中查找与目标消费主题对应的消费记录,从消息队列中获取与目标消费主题对应的消费数据,并在数据状态记录表中更新目标消费主题所对应的消费记录;

若不存在,则从消息队列中依次获取与目标消费主题对应的消费数据,并将目标消费主题的消费信息记录入数据状态记录表中。

其中,从消息队列中获取与目标消费主题对应的消费数据包括:从消费记录中获取目标消费主题的分区信息及目标消费主题的偏移量信息;

根据目标消费主题的分区信息及偏移量信息确定目标消费主题的消费节点;

根据消费节点从消息队列中获取消费数据。

计算机程序产品执行程序时还用于实现:

对数据状态记录表中存储的分区信息进行刷新处理。

计算机程序产品执行程序时还用于实现:

对消费数据进行解析,得到消费数据的事件类型;

根据事件类型存储消费数据至与事件类型相对应的数据库中。

计算机程序产品执行程序时还用于实现:

根据配置的时间间隔断开与kafka集群的连接,消息队列保存在kafka集群中。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

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

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

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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