买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】数据处理方法及相关装置_腾讯科技(深圳)有限公司_201810206068.3 

申请/专利权人:腾讯科技(深圳)有限公司

申请日:2018-03-13

公开(公告)日:2020-11-24

公开(公告)号:CN108595483B

主分类号:G06F16/2457(20190101)

分类号:G06F16/2457(20190101);G06F16/2458(20190101);G06Q30/02(20120101);H04W8/18(20090101)

优先权:

专利状态码:有效-授权

法律状态:2020.11.24#授权;2018.10.26#实质审查的生效;2018.09.28#公开

摘要:本申请实施例公开了数据处理方法及相关装置,属于大数据处理技术领域。该方法中在接收到消费者发送的消费请求后查找该消费请求的主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳;将时间范围在本次查找到的最大哨兵时间戳和消费者上次消费时查找到的最大哨兵时间戳之间,且属于主题的数据确定为消费者的本次消费数据发送给消费者。对生产者而言,其信息的发布本身是有序的、无论是否存在网络延迟、只要接收到其发布的哨兵时间戳,即表示该生产者该哨兵时间戳之前的数据已经发布出去,该哨兵时间戳之前的数据是完整可以消费的,从而可以避免数据时间串位。

主权项:1.一种数据处理方法,其特征在于,所述方法包括:接收消费者发送的消费请求,所述消费请求中包含消费的数据的主题;根据所述消费请求,查找所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳;其中,针对每个生产者,所述生产者的任一哨兵时间戳是在确定所述任一哨兵时间戳之前的待发布数据均发布完成之后发送的;将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据;将所述本次消费数据发送给所述消费者。

全文数据:数据处理方法及相关装置技术领域[0001]本申请实施例涉及大数据处理技术领域,特别涉及数据处理方法及相关装置。背景技术[0002]如图1所不为基于发布订阅的消息系统。其中,每个消费者consumer都在一个消费者组consumergroup中。消息以Topic为类别记录,每一类消息可称之为一个主题,同一主题的消息可存放在不同的分区中(partition。每一个分区都是一个顺序的、不可变的消息队列,并且可以持续的添加。同一主题的消息生产者发布消息时,该消息携带有可以自定义的Key,发布订阅消息系统根据Key来确定该消息写入哪个分区。分区中的消息会被分配一个序列号,称之为偏移量offsetconsumer在消费分区数据时,通过分区的消息偏移量来实现。[0003]对于单生产者来说,其发布的消息按照key进行分组,将消息分到不同的Partition中去,相同Key的数据肯定会归到同一个Partition中去,而且在Partition内部有序。当有多个生产者使用同一Key,且同一Key的消息往不同的Partition写时,consumer在消费分区数据时,无法保证下一次数据都比上一次数据的时间戳大,从而导致数据整体不连续有序。如图2和图3所示,用同一个key写入两个分区来说明问题:[0004]在图2和图3中(t表示消息的生产时间,tl比t2要早生产,以此类推)。虚线框内的消息表示将要接收到的消息,实线框内的消息为当前接收到的最新消息。[0005]在图2中,由于数据上报延迟,导致Partitionl仅收到tl时刻的消息,而Partition〗收到,U-t3时刻的消息。那么本次消费时,能消费Partitionl的tl数据和Partition2的tl、t2和t3,即本次消费的数据时间范围为[tl,t3]。[0006]当下次消费时,如图3所不,Partitionl已经接收了t2时刻的消息,Partition2已经接收了t4时刻的消息,那么该次消费时,数据时间范围为[t2,t4]。[0007]由此可见,两次消费间隔存在数据时间串位,会导致后续数据处理时出现逻辑错误。发明内容[0008]为了解决现有技术中同一主题的消息有多个生产者时导致消费时容易数据时间串位的问题,本申请实施例提供了数据处理方法及相关装置。所述技术方案如下:[0009]根据本申请实施例的第一方面,提供了一种数据处理方法,包括:[0010]接收消费者发送的消费请求,所述消费请求中包含消费的数据的主题;[0011]根据所述消费请求,查找所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳;[0012]将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据;[0013]将所述本次消费数据发送给所述消费者。[0014]在一种可能的实施方式中,所述方法还包括:[0015]接收生产者发送的消息,所述消息中包括时间戳和时间戳类别标识;[0016]若根据所述时间戳类别标识确定接收到的该消息中的时间戳为哨兵时间戳时,查找该哨兵时间戳的元数据,每一个哨兵时间戳的元数据中包括哨兵时间戳及其对应的累加分区数;[0017]若未查找到,则创建该哨兵时间戳的元数据,在创建的该哨兵时间戳的元数据中,该哨兵时间戳的对应的累加分区数被初始化为:预先为发送该消息的生产者分配的分区数;[0018]若查找到,则将预先为发送该消息的生产者分配的分区数累加到该哨兵时间戳对应的累加分区数中;[0019]所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳为:[0020]所有哨兵时间戳的元数据中,累加分区数等于为所述多个生产者分配的总分区数的最大哨兵时间戳。[0021]在一种可能的实施方式中,所述元数据中还包括预先为所述多个生产者分配的各分区中存储的最后一条消息的偏移量;[0022]所述将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据,包括:[0023]针对所述多个生产者的每个分区执行:[0024]获取本次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量,并获取所述生产者上次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量;[0025]根据获取的两偏移量的差值,得到该分区的本次消费数据。[0026]在一种可能的实施方式中,所述方法还包括:[0027]将所述本次消费数据按照时间戳进行排序;[0028]所述将所述本次消费数据发送给所述消费者,包括:[0029]将排序后的本次消费数据发送给所述消费者。[0030]在一种可能的实施方式中,所述方法还包括:[0031]针对各生产者,根据该生产者发送消息的总数据量,确定该生产者适用的分区数;[0032]根据确定的分区数为该消息的生产者分配分区。[0033]在一种可能的实施方式中,所述根据确定的分区数为该消息的生产者分配分区,包括:[0034]查找未被分配给所述多个生产者中任一生产者的分区,并分配给该消息的生产者。[0035]在一种可能的实施方式中,所述方法还包括:[0036]若接收到的消息的时间戳为普通时间戳,则将该消息写入预先为该消息的生产者分配的分区中。[0037]在一种可能的实施方式中,所述消息中还包括用户账号;所述将该消息写入预先为该消息的生产者分配的分区中,包括:[0038]计算该消息中的用户账号的哈希值;[0039]将该哈希值取模该消息的生产者标识对应的分区数,得到取模结果;[0040]将该消息写入取模结果表示的分区中。[0041]根据本申请实施例的第二方面,提供了一种数据处理装置的,该装置包括:[0042]消费请求接收模块,用于接收消费者发送的消费请求,所述消费请求中包含消费的数据的主题;[0043]最大哨兵时间戳确定模块,用于根据所述消费请求,查找所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳;[0044]本次消费数据确定模块,用于将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据;[0045]发送模块,用于将所述本次消费数据发送给所述消费者。[0046]在一种可能的实施方式中,所述装置还包括:[0047]消息接收模块,用于接收生产者发送的消息,所述消息中包括时间戳和时间戳类别标识;[0048]元数据查找模块,用于若根据所述时间戳类别标识确定接收到的该消息中的时间戳为哨兵时间戳时,查找该哨兵时间戳的元数据,每一个哨兵时间戳的元数据中包括哨兵时间戳及其对应的累加分区数;[0049]元数据创建模块,用于若未查找到,则创建该哨兵时间戳的元数据,在创建的该哨兵时间戳的元数据中,该哨兵时间戳的对应的累加分区数被初始化为:预先为发送该消息的生产者分配的分区数;[0050]更新模块,用于若查找到,则将预先为发送该消息的生产者分配的分区数累加到该哨兵时间戳对应的累加分区数中;[0051]所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳为:[0052]所有哨兵时间戳的元数据中,累加分区数等于为所述多个生产者分配的总分区数的最大哨兵时间戳。[0053]在一种可能的实施方式中,所述元数据中还包括预先为所述多个生产者分配的各分区中存储的最后一条消息的偏移量;[0054]所本次消费数据确定模块,用于针对所述多个生产者的每个分区执行:[0055]获取本次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量,并获取所述生产者上次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量;[0056]根据获取的两偏移量的差值,得到该分区的本次消费数据。[0057]在一种可能的实施方式中,所述装置还包括:[0058]排序模块,用于将所述本次消费数据按照时间戳进行排序;[0059]所述发送模块,用于将排序后的本次消费数据发送给所述消费者。[0060]在一种可能的实施方式中,所述装置还包括:[0061]分区数确定模块,用于针对各生产者,根据该生产者发送消息的总数据量,确定该生产者适用的分区数;[0062]分配模块,用于根据确定的分区数为该消息的生产者分配分区。[0063]在一种可能的实施方式中,所述分配模块,用于查找未被分配给所述多个生产者中任一生产者的分区,并分配给该消息的生产者。[0064]在一种可能的实施方式中,所述装置还包括:[0065]消息写入模块,用于若接收到的消息的时间戳为普通时间戳,则将该消息写入预先为该消息的生产者分配的分区中。[0066]在一种可能的实施方式中,所述消息中还包括用户账号;所述消息写入模块,用于:[0067]计算该消息中的用户账号的哈希值;[0068]将该哈希值取模该消息的生产者标识对应的分区数,得到取模结果;[0069]将该消息写入取模结果表示的分区中。[0070]根据本申请实施例的第三方面,提供了一种计算设备,包括存储器和处理器,其中,所述存储器用于存储程序指令,所述处理器用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如本申请实施例所述的任一数据处理方法。[0071]根据本申请实施例的第四方面,提供了一种计算机存储介质,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如本申请实施例所述的任一数据处理方法。[0072]本申请实施例中,哨兵时间戳为各生产者按照相同的发布周期发布、且同时发布。针对每个生产者,其消息的发布本身是有序的、无论是否存在网络延迟、只要接收到其发布的哨兵时间戳,即表示该生产者该哨兵时间戳之前的数据己经发布出去,该哨兵时间戳之前的数据是完整可以消费的,从而可以避免数据时间串位。附图说明[0073]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0074]图1示出了现有技术发布订阅消息系统的框架图;[0075]图2示出了现有技术中多生产往不同分区写消息的消息队列图;[0076]图3示出了图2所示的下一刻不同分区的消息队列图;[0077]图4示出了本申请实施例适用的应用场景示意图;[0078]图5示出了本申请一个实施例提供的数据处理方法的流程图;[0079]图6示出了本申请一个实施例提供的根据元数据实现本申请技术方案的流程图;[0080]图7示出了本申请一个实施例提供的将元数据示意图;[0081]图8示出了本申请一个实施例提供的解析序列化结果进行显示的界面示意图;[0082]图9示出了本申请一个实施例提供的处理接收到的消息的流程框图;[0083]图10示出了本申请一个实施例提供的为生产者分配的分区及个分区存储的数据的示意图;[0084]图11不出了本申请一个实施例提供的确定的本次消费数据的示意图;[0085]图12=出本申请一个实施例提供的数据处理装置的结构示意图;[0086]图13^出了本申请一个实施例提供的服务器的结构示意图;[0087]图14示出了本申请一个实施例提供的终端的结构示意图。具体实施方式[0088]为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。[0089]_在本文中提及的“多个”是指两个或两个以上。“和或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符7”一般表示前后关联对象是一种“或”的关系。为便于列举,下面对本申请实施例中一些名词进行解释:[0090]高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决的。[0091]主题,消息的类别,同一Topic称之为同一主题。[0092]生产者,将生产的数据例如日志)以消息的形式发布出去。[0093]消费者,从发布订阅消息系统集群获取数据进行处理。[0094]时间戳,指时间,本申请实施例中时间戳可以携带在消息中,用于表示生产者发送或生成该消息的时间。[0095]数据完整性,指消费者消费数据时,同一时间段的数据时完整的,不会出现下次消费时,出现数据时间串位的问题。[0096]数据有序,按数据生成时间进行排序。[0097]接下来对本申请的基本原理做简要说明:本申请实施例中,生产者可以发布两种消息,一种是原来的用于消费者实际消费的消息,另一种是带有哨兵时间戳的消息。其中,带有哨兵时间戳的消息为各生产者按照相同的发布周期发布、且同时发布。针对每个生产者,其消息的发布本身是有序的、无论是否存在网络延迟、只要接收到其发布的带有哨兵时间戳的消息,即表示该生产者该哨兵时间戳之前的数据已经发布出去,该时间戳之前的数据是完整可以消费的。例如,时间tl生产者A发布了日志、在tl之后的时间t2生产者发布了带有哨兵时间戳的消息。既然接收到t2时刻的数据,tl时刻的数据自然接收到。故此t2之前的数据是完整的。那么,当同一主题具有多个生产者时,当接收到这多个生产者各自发布的相同哨兵时间戳的消息后,表征各生产者该哨兵时间戳之前的数据都是完整的。这样,消费者在消费时,根据哨兵时间戳消费数据,得到的是完整的数据,从而可以避免数据时间串位。[0098]下面对本申请实施例能够适用的应用场景做一些简单介绍,需要说明的是,该应用场景仅用于说明本申请实施例而非限定。具体实施时,可以根据实际需要应用本申请实施例提供的技术方案。[0099]参考图4,其为本申请实施例提供的应用场景示意图之一,该场景例如可以包括用户40、终端设备41、作为生产者的服务器似、发布订阅消息系统集群43和作为消费者的服务器44。其中,终端设备41中可安装有各种客户端,如游戏应用、网购APP、即时聊天工具#。[0100]以终端设备41安装网购APP为例,具体实施时,网购用户40的网购记录由服务器42整合成保护多用户的网购日志,作为消息发送给发布订阅消息系统集群43,以便于消费者44消费。服务器42除了发送网购日志外,还发送带有哨兵时间戳的日志,以便于发布订阅消息系统集群幻确定哪些网购日志是完整的可以消费的。[0101]为便于进一步说明本申请实施例提供的技术方案,下面结合具体实施例对此作进一步说明。[0102]参考图5,其为本申请实施例提供的数据处理方法的流程图,包括:[0103]S51,接收消费者发送的消费请求,所述消费请求中包含消费的数据的主题。[0104]S52,根据所述消费请求,查找所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳。[0105]S53,将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据。[0106]具体实施时,两时间戳之间的数据即为消费者本次消费的数据。[0107]Sf54,将所述本次消费数据发送给所述消费者。[0108]具体实施时,生产者可以单独发送哨兵时间戳,当然也可以如前述将哨兵时间戳携带在消息中发送。以消息的形式发送时,该消息中可包括时间戳和时间戳类别标识。[0109]具体实施时,可以提供SDKSoftwareDevelopmentKit,软件开发工具包给生产者调用上报消息。上报的消息类型分为普通消息和哨兵消息。SDK核心功能如下:[0110]自动在消息前缀添加时间戳和时间戳类别标识。比如游戏上报的日志如下:[0111]帐号|等级|购买道具ID|花费代币[0112]调用SDK接口上报时,会自动添加时间戳,日志如下:[0113]时间戳I普通日志标识|帐号|等级|购买道具ID|花费代币;[0114]其中普通日志标识表不该日志的时间戳类别为普通时间戳。[0115]此外,每个时间段间隔可配置会生成哨兵日志,格式如下:[0116]时间戳|哨兵日志标识;[0117]其中,哨兵日志标识表示该日志的时间戳类别为哨兵时间戳。[0118]接下来,对本申请实施例中提供两种实现方法对查找最大哨兵时间戳举例说明.[0119]方法一,从消息队列中查找:[0120]如前所述,消息包括普通时间戳的消息和哨兵时间戳的消息。且同一主题的多个生产者均有各自对应的分区,各分区均有自己的消息队列。[0121]具体实施时,可以不管何种消息都依次存放在消息队列中。当接收到用户的消费请求时,可以在各分区的消息队列中查找哨兵时间戳,查找到后和其他消息队列中查找到的哨兵时间戳进行比对,若各消息队列中均包含该哨兵时间戳,且是均包含的哨丘时间戳中最晚的时间戳,则其为本次消费时要使用的最大哨兵时间戳。户、[0122]该方法中,只需要原本存在的消息队列即可确定最大时间戳,但是需要对各消_队列不断进行试探,当分区数较多消息较多时,处理负担较重。有鉴于此,为了快^大哨兵时_,龍細施二。[0123]方法二,可以通过元数据管理实现,实施流程可如图6所示:[0124]S61,接收生产者发送的消息,所述消息中包括时间戳和时间戳类别标识。[0125]S62,若根据所述时间戳类别标识确定接收到的该消息中的时间戳为哨兵时间戳时,查找该哨兵时间戳的元数据,每一个哨兵时间戳的元数据中包括哨兵时间戳及其对应的累加分区数;若未查找到,执行步骤S63,若查找到,执行步骤S64。[0126]S63,创建该哨兵时间戳的元数据,在创建的该哨兵时间戳的元数据中,该哨兵时间戳的对应的累加分区数被初始化为:预先为发送该消息的生产者分配的分区数。[0127]生产者的分区如何分配将在后文中介绍,这里暂不详述。[0128]S64,将预先为发送该消息的生产者分配的分区数累加到该哨兵时间戳对应的累加分区数中。[0129]S65,确定所有哨兵时间戳的元数据中,累加分区数等于为所述多个生产者分配的总分区数的最大哨兵时间戳为所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳,其中,总分区数是固定值。[0130]例如,假设同一主题的生产者有两个、分别为生产者A和生产者B。接收到和8在时刻t2同时发送携带哨兵时间戳为t2的消息、且接收到在t2之后的时刻t3同时发送携带哨兵时间戳为t3的消息,然后仅收到A在t3之后的时刻t4同时发送携带哨兵时间戳为t4的消息,那么满足条件的最大的哨兵时间戳为t3,因为t4对应的累加分区数不满足条件,实际上14仅是一个生产者发送的,所以t4不是本次消费时要使用的最大哨兵时间戳。[0131]进一步的,为了便于确定本次消费的数据范围,本申请实施例中,所述元数据中还包括预先为所述多个生产者分配的各分区中存储的最后一条消息的偏移量。那么,针对消费者请求的主题的多个生产者的每个分区,可以获取本次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量,并获取所述生产者上次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量;然后根据获取的两偏移量的差值,得到该分区的本次消费数据。'[0132]为便于理解元数据,这里对此进行举例说明。元数据结构如图7所示,其中:[0133](Sentineltime,N中,Sentineltime表示哨兵时间戳,N表示累加分区数。比如t3,3表不该哨兵时间戳的累加分区数为3个。如果该同一主题的多个生产者总共有3个分区,则表示该哨兵时间戳前的数据完整可以被消费。[0134]2、(Partition,Offset中,Partition表示分区号,〇ffset表示消息的偏移量。比如2,368885表示分区2存储的最后一条消息的偏移量为368885。[0135]假设上次消费时哨兵时间戳为t2,对应分区1的消息偏移量为26885,本次消费时哨兵时间戳为t3,对应分区1的消息偏移量为36885,则36885与268阳的差值即为本次消费时分区1的数据范围。'[0136]为生产者分配分区时,可以由管理员预先进行人工配置。进一步的,为了合理分配分区,各生产者的分区可以根据消息的数据量来确定。具体的,针对各生产者,根据该生产者发送消息的总数据量,确定该生产者适用的分区数;根据确定的分区数为该消息的生产者分配分区。例如,总归有编号分别为1-10的10个分区,共两个生产者,其中一个生产者生产的数据量比较小,可以将编号分别为1-4的分区分配给它,另一个生产者则拥有编号分别为5-10的分区。[0137]针对同一分区当有多个生产者并发写入消息时,容易导致分区内数据无序,即数据尤法按生成时丨日」排序。这容易导致后续处理出现逻辑错误。故此,本申请实施例中,为实现数据有序,每个分区仅允许一个生产者写入消息。实现方式为在分配分区时,针对各消息的生产者,要查找未被分配给所述多个生产者中任一生产者的分区,并分配给该消息的生产者。这样,一个分区仅属于一个生产者,每个分区仅允许一个生产者写入消息,从而可以实现数据有序。[0138]故此,每个生产者有对应的分区后,若接收到的消息的时间戳为普通时间戳,则将该消息写入预先为发送该消息的生产者分配的分区中。[0139]进一步的,为便于确定各消息的分区,所述消息中还可以包括用户账号;[0140]确定分区时,可以计算该消息中的用户账号的哈希值;然后将该哈希值取模该消息的生产者标识对应的分区数,得到取模结果;将该消息写入取模结果表示的分区中。这样可以将每个用户的记录集中在一个分区中。例如网购用户C,其消费记录可以通过其账户写入同一分区。[0141]为了进一步保证发送给消费者的数据有序,本申请实施例中,还可以将本次消费数据按照时间戳进行排序;然后将将排序后的本次消费数据发送给所述消费者。这样,生产者得到的消息就是有序的消息。[0142]为便于进一步理解本申请实施提供的技术方案,下面以生产者为游戏服务器,上报的消息为游戏日志为例,对此进行说明:[0143]首先,该例子中适用的环境架构图,如图8所示,其中:GameSvr为游戏服务器,其上报日志,上报的2种日志格式如下:[0144]时间戳|普通日志标识|帐号|等级|购买道具ID|花费代币;[0145]时间戳|哨兵日志标识;[0146]游戏服务器上报的日志由数据代理接收,数据代理对上报日志进行处理。如图9所示,为数据代理进行处理的流程图。其中,写入元数据的操作即执行图6的流程,并且在各分区中获取最后一个消息的偏移量写入元数据中。[0147]如图10所不,假设GameSvr有两个分别为GameSvr1和GameSvr2。为GameSvr1分配Partitionl,GameSvr2上报的数据规模比较大为其分配了2个分区分别为Partition2和Partition〗。每个分区仅允许1个GameSvr写数据。个分区的数据如图10所示,这里不再赘述。需要说明的是,图10中A、B、C分别表示用户账号。Meta为元数据信息。[0148]由图8中数据处理引擎如Storm引擎、SparkStreaming获取本次消费的分区数据,具体的:假设元数据信息如前述图7中所示,由于t3的累加分区数为3正好和分配的总分区数相同,而最大时间戳t4的累加分区数仅为1小于分配的总分区数。所以,本次消费时能够消费的数据为t3之前的数据。[0149]数据处理引擎根据上次消费各分区的偏移量,确定本次消费的数据如图11,得到的分区数据为:[0150]Partitionl:tl|A,t3|C[0151]Partition2:tl|B,t3|B[0152]Partition3:t2|A[0153]数据处理引擎对获取到的数据进行排序,可通过Transformations转化,数据如下:[0154]Partitionl:A,tl,(C,t3[0155]Partition〗:((B,tl,(B,t3[0156]Partition3:A,t2[0157]对数据进行shuffled,即按帐号列进行重新分区,并对分区内的数据进行时间戳排序,得到的数据如下:[0158]Partitionl:A,tl,A,t2,C,t3[0159]Partition2:B,tl,B,t3[0160]这样,得到的数据按照用户和时间进行排序使得获取的数据有序。然后该引擎可以将排序后的数据进行存储计算存入相应的数据库中,然后将排序后的数据发送给消费者。如图8所述,消费者可以根据获取的数据进行相应的处理如数据分析、营销渠道分析和精准推荐等)。[0161]综上所述,本申请实施例中,通过哨兵时间戳可以确定本次消费的完整数据,以便于在消费者消费时不至于因为数据上报延迟而导致数据时间串位。[0162]此外,每个分区仅允许一个生产者写入数据,能够保证分区内数据有序。进一步的,通过数据排序,可以进一步使得数据可以更加有序,便于消费者消费。[0163]下述为本申请装置实施例,对于装置实施例中未详尽描述的细节,可以参考上述——对应的方法实施例。[0164]请参考图12,其示出了本申请一个实施例提供的数据处理装置的结构方框图,该装置包括:[0165]消费请求接收模块1201,用于接收消费者发送的消费请求,所述消费请求中包含消费的数据的主题;[0166]最大哨兵时间戳确定模块1202,用于根据所述消费请求,查找所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳;[0167]本次消费数据确定模块1203,用于将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据;[0168]发送模块1204,用于将所述本次消费数据发送给所述消费者。[0169]在一种可能的实施方式中,所述装置还包括:[0170]消息接收模块,用于接收生产者发送的消息,所述消息中包括时间戳和时间戳类别标识;[0171]元数据查找模块,用于若根据所述时间戳类别标识确定接收到的该消息中的时间戳为哨兵时间戳时,查找该哨兵时间戳的元数据,每一个哨兵时间戳的元数据中包括哨兵时间戳及其对应的累加分区数;[0172]元数据创建模块,用于若未查找到,则创建该哨兵时间戳的元数据,在创建的该哨兵时间戳的元数据中,该哨兵时间戳的对应的累加分区数被初始化为:预先为发送该消息的生产者分配的分区数;[0173]更新模块,用于若查找到,则将预先为发送该消息的生产者分配的分区数累加到该哨兵时间戳对应的累加分区数中;[0174]所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳为:[0175]所有哨兵时间戳的元数据中,累加分区数等于为所述多个生产者分配的总分区数的最大哨兵时间戳。[0176]在一种可能的实施方式中,所述元数据中还包括预先为所述多个生产者分配的各分区中存储的最后一条消息的偏移量;[0177]所本次消费数据确定模块,用于针对所述多个生产者的每个分区执行:[0178]获取本次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量,并获取所述生产者上次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量;[0179]根据获取的两偏移量的差值,得到该分区的本次消费数据。[0180]在一种可能的实施方式中,所述装置还包括:[0181]排序模块,用于将所述本次消费数据按照时间戳进行排序;[0182]所述发送模块,用于将排序后的本次消费数据发送给所述消费者。[0183]在一种可能的实施方式中,所述装置还包括:[0184]分区数确定模块,用于针对各生产者,根据该生产者发送消息的总数据量,确定该生产者适用的分区数;[0185]分配模块,用于根据确定的分区数为该消息的生产者分配分区。[0186]在一种可能的实施方式中,所述分配模块,用于查找未被分配给所述多个生产者中任一生产者的分区,并分配给该消息的生产者。[0187]在一种可能的实施方式中,所述装置还包括:[0188]消息写入模块,用于若接收到的消息的时间戳为普通时间戳,则将该消息写入预先为该消息的生产者分配的分区中。[0189]在一种可能的实施方式中,所述消息中还包括用户账号;所述消息写入模块,用于:[0190]计算该消息中的用户账号的哈希值;[0191]将该哈希值取模该消息的生产者标识对应的分区数,得到取模结果;[0192]将该消息写入取模结果表示的分区中。[0193]本申请实施例还提供一种计算设备,其可以包括存储器和处理器,其中,所述存储器用于存储程序指令,所述处理器用于调用所述存储器中存储的程序指令,按照获得的程序指令执行本申请实施例提供的数据处理方法。[0194]例如,请参考图13,其示出了该计算设备例如为服务器的结构方框图。该服务器1300实现为图4中的服务器43,也可以实现为图8中数据代理和数据处理引擎(如Storm引擎。具体来讲:[0195]服务器1300包括中央处理单元CPU1301、包括随机存取存储器RAM1302和只读存储器ROM1303的系统存储器1304,以及连接系统存储器1304和中央处理单元1301的系统总线1305。所述服务器1300还包括帮助计算机内的各个器件之间传输信息的基本输入输出系统(IO系统)1306,和用于存储操作系统1313、应用程序1314和其他程序模块1315的大容量存储设备1307。[0196]所述基本输入输出系统13〇6包括有用于显示信息的显示器1308和用于用户输入信息的诸如鼠标、键盘之类的输入设备1309。其中所述显示器1308和输入设备1309都通过连接到系统总线1305的输入输出控制器1310连接到中央处理单元13〇1。所述基本输入输出系统1306还可以包括输入输出控制器1310以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1310还提供输出到显示屏、打印机或其他类型的输出设备。[0197]所述大容量存储设备1307通过连接到系统总线1305的大容量存储控制器(未示出)连接到中央处理单元1301。所述大容量存储设备13〇7及其相关联的计算机可读介质为服务器1300提供非易失性存储。也就是说,所述大容量存储设备13〇7可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质未示出)。[0198]不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括1^1、1?^、£?1?01^£?1?^、闪存或其他固态存储其技术,00-如1!、0¥0或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1304和大容量存储设备1307可以统称为存储器。[0199]根据本申请的各种实施例,所述服务器1300还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器1300可以通过连接在所述系统总线1305上的网络接口单元1311连接到网络1312,或者说,也可以使用网络接口单元1311来连接到其他类型的网络或远程计算机系统未示出)。[0200]所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的数据处理方法和或数据处理方法的指令。[0201]本领域普通技术人员可以理解上述实施例的签到方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(R〇M,ReadOnlyMemory、随机存取记忆体(RAM,RandomAccessMemory、磁盘或光盘等。[0202]请参考图14,其示出了本申请一个实施例提供的终端的结构示意图。该终端1400为图1中的终端。具体来讲:[0203]终端M00可以包括RFRadioFrequency,射频)电路1410、包括有一个或一个以上计算机可读存储介质的存储器142〇、输入单元1430、显示单元1440、传感器1450、音频电路1460、近场通信模块1470、包括有一个或者一个以上处理核心的处理器1480、以及电源1490等部件。本领域技术人员可以理解,图13中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:[0204]RF电路1410可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器1480处理。通常,RF电路1410包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块S頂卡、收发信机、耦合器、LNALowNoiseAmplifier,低噪声放大器)、双工器等。此外,RF电路1410还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSMGlobalSystemofMobilecommunication,全球移动通讯系统)、GPRSGeneralPacketRadioService,通用分组无线服务)、CDMACodeDivisionMultipleAccess,码分多址)、WCDMAWidebandCodeDivisionMultipleAccess,宽带码分多址)、LTELongTermEvolution,长期演进)、电子邮件、SMSShortMessagingService,短消息服务)等。[0205]存储器1420可用于存储软件程序以及模块,处理器1480通过运行存储在存储器1420的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器1420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端1400的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1420还可以包括存储器控制器,以提供处理器1480和输入单元1430对存储器1420的访问。[0206]输入单元1430可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元1430可包括图像输入设备1431以及其他输入设备1432。图像输入设备1431可以是摄像头,也可以是光电扫描设备。除了图像输入设备1431,输入单元1430还可以包括其他输入设备1432。具体地,其他输入设备1432可以包括但不限于物理键盘、功能键比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。[0207]显示单元1440可用于显示由用户输入的信息或提供给用户的信息以及终端1400的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元1440可包括显示面板1441,可选的,可以采用LCDLiquidCrystalDisplay,液晶显示器)、0LED0rganicLight-EmittingDiode,有机发光二极管等形式来配置显示面板1441。[0208]终端1400还可包括至少一种传感器1450,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1441的亮度,接近传感器可在终端1400移动到耳边时,关闭显示面板1441和或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上一般为三轴加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击等;至于终端1400还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。[0209]音频电路1460、扬声器1461,传声器1462可提供用户与终端1400之间的音频接口。音频电路1460可将接收到的音频数据转换后的电信号,传输到扬声器1461,由扬声器1461转换为声音信号输出;另一方面,传声器1462将收集的声音信号转换为电信号,由音频电路1460接收后转换为音频数据,再将音频数据输出处理器1480处理后,经RF电路1414以发送给比如另一电子设备,或者将音频数据输出至存储器1420以便进一步处理。音频电路1460还可能包括耳塞插孔,以提供外设耳机与终端1400的通信。[0210]终端1400通过近场通信模块1470与外部设备建立近场通信连接,并通过该近场通信连接进行数据交互。本实施例中,该近场通信模块1470具体包括蓝牙模块和或WiFi模块。[0211]处理器1480是终端1400的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1420内的软件程序和或模块,以及调用存储在存储器1420内的数据,执行终端14〇〇的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1480可包括一个或多个处理核心;优选的,处理器1480可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1480中。[0212]终端1400还包括给各个部件供电的电源1490比如电池),优选的,电源可以通过电源管理系统与处理器1480逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源1490还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。[0213]尽管未示出,终端1400还可以包括蓝牙模块等,在此不再赘述。[0214]具体在本实施例中,终端1400还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行以实现上述数据处理方法。[0215]本领域普通技术人员可以理解上述实施例的签到方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介质可以包括:只读存储器R〇M,ReadOnlyMemory、随机存取记忆体RAM,RandomAccessMemory、磁盘或光盘等。[0216]上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。[0217]以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

权利要求:1.一种数据处理方法,其特征在于,所述方法包括:接收消费者发送的消费请求,所述消费请求中包含消费的数据的主题;根据所述消费请求,查找所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳;将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据;将所述本次消费数据发送给所述消费者。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:接收生产者发送的消息,所述消息中包括时间戳和时间戳类别标识;若根据所述时间戳类别标识确定接收到的该消息中的时间戳为哨兵时间戳时,查找该哨兵时间戳的元数据,每一个哨兵时间戳的元数据中包括哨兵时间戳及其对应的累加分区数;若未查找到,则创建该哨兵时间戳的元数据,在创建的该哨兵时间戳的元数据中,该哨兵时间戳的对应的累加分区数被初始化为:预先为发送该消息的生产者分配的分区数;若查找到,则将预先为发送该消息的生产者分配的分区数累加到该哨兵时间戳对应的累加分区数中;所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳为:所有哨兵时间戳的元数据中,累加分区数等于为所述多个生产者分配的总分区数的最大哨兵时间戳。3.根据权利要求2所述的方法,其特征在于,所述元数据中还包括预先为所述多个生产者分配的各分区中存储的最后一条消息的偏移量;所述将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据,包括:针对所述多个生产者的每个分区执行:获取本次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量,并获取所述生产者上次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量;根据获取的两偏移量的差值,得到该分区的本次消费数据。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:将所述本次消费数据按照时间戳进行排序;所述将所述本次消费数据发送给所述消费者,包括:将排序后的本次消费数据发送给所述消费者。5.根据权利要求2所述的方法,其特征在于,所述方法还包括:针对各生产者,根据该生产者发送消息的总数据量,确定该生产者适用的分区数;根据确定的分区数为该消息的生产者分配分区。6.根据权利要求5所述的方法,其特征在于,所述根据确定的分区数为该消息的生产者分配分区,包括:查找未被分配给所述多个生产者中任一生产者的分区,并分配给该消息的生产者。7.根据权利要求2-6中任一所述的方法,其特征在于,所述方法还包括:若接收到的消息的时间戳为普通时间戳,则将该消息写入预先为该消息的生产者分配的分区中。8.根据权利要求7所述的方法,其特征在于,所述消息中还包括用户账号;所述将该消息写入预先为该消息的生产者分配的分区中,包括:计算该消息中的用户账号的哈希值;将该哈希值取模该消息的生产者标识对应的分区数,得到取模结果;将该消息写入取模结果表示的分区中。9.一种数据处理装置,其特征在于,所述装置包括:消费请求接收模块,用于接收消费者发送的消费请求,所述消费请求中包含消费的数据的主题;最大哨兵时间戳确定模块,用于根据所述消费请求,查找所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳;本次消费数据确定模块,用于将时间范围在本次查找到的最大哨兵时间戳和所述消费者上次消费时查找到的最大哨兵时间戳之间,且属于所述主题的数据确定为所述消费者的本次消费数据;发送模块,用于将所述本次消费数据发送给所述消费者。10.根据权利要求9所述的装置,其特征在于,所述装置还包括:消息接收模块,用于接收生产者发送的消息,所述消息中包括时间戳和时间戳类别标识;元数据查找模块,用于若根据所述时间戳类别标识确定接收到的该消息中的时间戳为哨兵时间戳时,查找该哨兵时间戳的元数据,每一个哨兵时间戳的元数据中包括哨兵时间戳及其对应的累加分区数;元数据创建模块,用于若未查找到,则创建该哨兵时间戳的元数据,在创建的该哨兵时间戳的元数据中,该哨兵时间戳的对应的累加分区数被初始化为:预先为发送该消息的生产者分配的分区数;更新模块,用于若查找到,则将预先为发送该消息的生产者分配的分区数累加到该哨兵时间戳对应的累加分区数中;所述主题的多个生产者按照相同的发送周期同时发送的哨兵时间戳中的最大哨兵时间戳为:所有哨兵时间戳的元数据中,累加分区数等于为所述多个生产者分配的总分区数的最大哨兵时间戳。11.根据权利要求10所述的装置,其特征在于,所述元数据中还包括预先为所述多个生产者分配的各分区中存储的最后一条消息的偏移量;所本次消费数据确定模块,用于针对所述多个生产者的每个分区执行:获取本次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量,并获取所述生产者上次消费时使用的哨兵时间戳对应该分区的最后一条消息的偏移量;根据获取的两偏移量的差值,得到该分区的本次消费数据。12.根据权利要求11所述的装置,其特征在于,所述装置还包括:排序模块,用于将所述本次消费数据按照时间戳进行排序;所述发送模块,用于将排序后的本次消费数据发送给所述消费者。13.根据权利要求10所述的装置,其特征在于,所述装置还包括:分区数确定模块,用于针对各生产者,根据该生产者发送消息的总数据量,确定该生产者适用的分区数;分配模块,用于根据确定的分区数为该消息的生产者分配分区。14.一种计算设备,其特征在于,包括存储器和处理器,其中,所述存储器用于存储程序指令,所述处理器用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如权利要求1-8任一所述的数据处理方法。15.—种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1-8任一所述的数据处理方法。

百度查询: 腾讯科技(深圳)有限公司 数据处理方法及相关装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。