CN109684099B - 消息处理方法及装置 - Google Patents
消息处理方法及装置 Download PDFInfo
- Publication number
- CN109684099B CN109684099B CN201811407856.5A CN201811407856A CN109684099B CN 109684099 B CN109684099 B CN 109684099B CN 201811407856 A CN201811407856 A CN 201811407856A CN 109684099 B CN109684099 B CN 109684099B
- Authority
- CN
- China
- Prior art keywords
- batch
- messages
- message
- partition
- specified
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W8/00—Network data management
- H04W8/18—Processing of user or subscriber data, e.g. subscribed services, user preferences or user profiles; Transfer of user or subscriber data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本公开涉及一种消息处理方法及装置,包括接收到指定主题的消息时,按照所述消息到达生产缓存区的顺序和所述指定主题的批次容量,为所述消息分配批次号;在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中;从所述指定主题对应的各分区中分别获取指定数量的批次的消息;按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息。通过分批处理消息,根据本公开实施例的消息处理方法及装置既能够保证消息的全局顺序消费,又提升了Kafka集群的利用率。
Description
技术领域
本公开涉及大数据技术领域,尤其涉及一种消息处理方法及装置。
背景技术
Kafka是一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统,它可处理消费者规模的网站中的所有动作流数据。
消息队列是一种应用程序与应用程序的通信方法。在应用架构设计时,可以使用消息队列实现不同组件的对接,协调不同组件的消息吞吐能力,Kafka作为高性能分布式消息队列具有高效的消息生产能力和消息消费能力。
Kafka可以以集群的方式分布在多个节点上运行,每个节点上的Kafka可以称为一个代理(broker)。Kafka可以给消息设定一个主题(topic)。Kafka的每个主题可以由多个分区(partition)组成,每个分区都是磁盘上的一个目录,用来实际存放属于该主题的消息。
相关技术中,一个主题采用多个分区实现消息的生产和消费时,无法确定从不同分区消费出来的消息的顺序,无法实现消息的全局顺序消费。一个主题采用一个分区,或者一个主题采用多个分区且指定一个用于生产和消费消息的分区时,可以实现消息的全局顺序消费。然而,上述两种方式在消息的生产和消息时均是利用一个分区,限制了消息生产和消费的性能,无法充分发挥分布式集群的优势,Kafka集群的利用率较低。
发明内容
有鉴于此,本公开提出了一种消息处理方法及装置,既能够保证消息的全局顺序消费,又提升了Kafka集群的利用率。
根据本公开的一方面,提供了一种消息处理方法,包括:接收到指定主题的消息时,按照所述消息到达生产缓存区的顺序和所述指定主题的批次容量,为所述消息分配批次号;所述批次容量为一个批次包含的消息的数量,所述批次号用于标识消息所属的批次;在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中;从所述指定主题对应的各分区中分别获取指定数量的批次的消息;按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息。
根据本公开的另一方面,提供了一种消息处理装置,包括:分配模块,用于接收到指定主题的消息时,按照所述消息到达生产缓存区的顺序和所述指定主题的批次容量,为所述消息分配批次号;所述批次容量为一个批次包含的消息的数量,所述批次号用于标识消息所属的批次;写入模块,用于在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中;获取模块,用于从所述指定主题对应的各分区中分别获取指定数量的批次的消息;提交模块,用于按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息。
在本公开实施例中,在消息生产时,按照消息到达生产缓存区的顺序和批次容量,为具有多个分区的主题的消息指定批次号,通过将所述生产缓存区中一个批次的消息,写入与该批次的批次号对应的分区中,使得同一主题的消息分布在不同的分区中提升了Kafka集群的利用率,通过在消费时,按照批次号的分配顺序,分批向消费者提交获取到的消息,使得同一主题的消息的消费顺序与生产顺序一致,保证了消息的全局顺序消费。因此,根据本公开各方面实施例的消息处理方法及装置,既能够保证消息的全局顺序消费,又提升了Kafka集群的利用率。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出根据本公开一实施例的消息处理方法的流程图。
图2示出了本公开实施例的Kafka的架构示意图。
图3示出本公开实施例的消息生产过程的一个示例性的示意图。
图4示出根据本公开一实施例的消息处理方法的流程图。
图5示出本公开实施例的消息消费过程的一个示例性的示意图。
图6示出根据本公开一实施例的消息处理装置的框图。
图7示出根据本公开一实施例的消息处理装置的框图。
图8是根据一示例性实施例示出的一种用于消息处理装置900的框图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
图1示出根据本公开一实施例的消息处理方法的流程图。该方法可以应用于Kafka集群的节点。图2示出了本公开实施例的Kafka的架构示意图。如图2所示,Kafka架构可包括:生产者(Producer)、代理(Broker)、消费者(Consumer)和ZooKeeper(未示出)。
Kafka服务可以以集群的方式分布在多个节点上,每个节点上的Kafka服务可以称为一个代理。生产者可以向代理发布消息,消费者可以从代理提取消息。代理可维护接收到的消息。生产者、代理和消费者可以通过ZooKeeper进行管理和协调。生产者生产消息并向代理发布;代理接收到生产者发送的消息并将消息持久化(将消息写入分区),然后提供若干个主题供消费者订阅;消费者从代理订阅某个主题的消息后,可以从代理提取该主题的消息。
如图1所示,所述消息处理方法可包括:
步骤S11,接收到指定主题的消息时,按照所述消息到达生产缓存区的顺序和所述指定主题的批次容量,为所述消息分配批次号;所述批次容量为一个批次包含的消息的数量,所述批次号用于标识消息所属的批次。
主题可以用于识别消息的类别,同一个主题的消息所属类别相同,不同主题的消息所属类别不同。一个主题物理上可以分成多个分区,每个分区是磁盘上的一个目录,用来实际存放属于该主题的消息,每个分区中存放的消息是一个有序的队列,分区中每个消息都会被分配一个有序的标识。一般属于同一类别的消息存储在一个主题的分区中,例如定位信息均存储在定位主题的分区中。不同类别的消息存储在不同的主题的分区中,例如定位信息、天气信息和登录信息分别存储在定位主题、天气主题和登录主题的分区中。
在一种可能的实现方式中,指定主题可以为有全局消费顺序要求的主题,即指定主题的消息的消费顺序需要与这些消息的到达生产缓存区的顺序一致。
在一种可能的实现方式中,可以对Kafka集群的主题增加一个用于区分主题是否为指定主题的参数,该新增的参数可以在创建主题时设置。在一个示例中,新增的参数的取值可以为0或1,取值为0(或者为1)时表示对应主题不是指定主题,取值为1(或者为0)时表示对应主题时指定主题。新增的参数的取值还可以为“true”或者“false”。对此本公开不做限制。
Kafka代理接收到消息后,可以确定该消息对应的主题,根据该主题的参数的取值,确定该消息是否为指定主题的消息。其中,消息对应的主题可以在生产者在发布消息时由生产者指定,也可以在Kafka代理中的代理接收到消息后由代理确定,对此本公开不做限制。
指定主题还可以为其他主题,对此本公开不做限制。
Kafka代理接收到消息后,先将消息存放在生产缓存区,再根据消息的主题,将消息写入该主题的分区中。
Kafka代理接收到指定主题的消息时,可以按照消息到达生产缓存区的顺序和指定主题对应的批次容量,为该消息分配批次号。
其中,批次容量可以为一个批次包含的消息的数量。在一种可能的实现方式中,对于指定主题,在创建该指定主题时,还可以设置该指定主题的批次容量。
批次号可以用于标识消息所属的批次。在一种可能的实现方式中,批次号可以是一串自增、连续分配、不可重复的Long类型数字。
举例来说,假设指定主题1的批次容量为3,则Kafka代理可以将第一个至第三个到达生产缓存区的指定主题1的消息确定为一个批次,分配批次号001,将第四个至第六个到达生产缓存区的指定主题1的消息确定为一个批次,分配批次号002,将第七个至第九个到达生产缓存区的指定主题1的消息确定为一个批次,分配批次号003,依次类推。
步骤S12,在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中。
当一个主题包括多个分区时,Kafka代理可以将该主题的消息写入不同的分区,以提升Kafka集群的利用率。在本公开实施例中,可以以批次为单位,分批向各分区写入消息,即生产缓存区中某个批次的数量达到该批次的批次容量时,将该批次的消息作为一个整体写入一个分区。其中,在将一个批次的消息写入分区的过程中,该批次的每条消息按到达生产缓存区的顺序依次写入分区。
在一种可能的实现方式中,步骤S12可包括:在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,根据所述批次号和所述指定主题的分区数量,确定所述批次号对应的分区号,将所述批次号对应的消息写入所确定的分区号对应的分区中。
其中,分区号可以用于识别唯一的分区。Kafka代理可以根据分区号确定唯一的分区。
在一个示例中,可以采用公式part_id=batch_id%p_num计算分区号。其中,part_id为分区号,batch_id为批次号,p_num为分区数量,%表示取模运算。Kafka代理可以根据批次号和指定主题的分区数量,通过上述公式确定批次号对应的分区号,进而确定该批次号对应的消息所写入的分区。
本公开实施例通过批次号确定分区号,可以使各分区消息数量均衡。本公开实施例还可以通过其他方式确定各批次号对应的分区号,例如,Kafka代理可以在写入消息时,将当前指定主题分区中消息数量最小的分区的分区号,确定为批次号对应的分区号。对此,本公开不做限制。
需要说明的是,针对每个批次,Kafka代理在将该批次的消息写入对应分区时,按照该批次中各消息到达生产缓存区的顺序依次写入该分区中。这样,可以保证一个批次内部消息的有序性。
举例来说,图3示出本公开实施例的消息生产过程的一个示例性的示意图。对于指定主题的消息,假设之前已经完成了批次5(批次号为5的批次)的消息的写入,指定主题的批次容量为3,指定主题的分区数量为3(包括分区0、分区1和分区2),根据步骤S11和S12,Kafka代理继续进行消息的生产,生产过程如图3所示。如图3所示,Kafka代理按照消息达到生产缓存区的顺序,依次为生产缓存区中指定主题的消息分配了批次号6、7和8。以批次6(批次号为6的批次)为例,批次号6和分区数量3取模,得到分区号为0,此时,Kafka代理可以将批次6的消息写入分区0。其中,由于分区0中已有消息已经占用了序列标识0至5,因此,批次6中的消息按照进入生产缓存区的顺序,在分区0的序列标识依次为6、7和8。同理,批次7的消息写入分区1,且在分区1中序列标识依次为6、7和8;批次8的消息写入分区2,且在分区2中序列标识依次为6、7和8。
在一种可能的实现方式中,在将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中之后,可以在确认写入完成时,从从所述生产缓存区中删除所述批次号对应的消息。在一个示例中,Kafka代理接收来自分区的写入完成消息,从该写入完成消息中获取批次号,并将生产缓存区中该批次号对应的消息删除。
确认某个批次的消息写入分区,表明该批次的消息已经完成了生产,此时,Kafka代理可以从生产缓存区中删除该批次的消息,以便于后续消息进入生产缓存区。
步骤S13,从所述指定主题对应的各分区中分别获取指定数量的批次的消息。
其中,指定数量可表示Kafka代理从一个分区中获取的批次的数量。Kafka代理可以从指定主题的各分区中获取数量相等的批次,这样避免遗漏某个分区的消息,从而造成消息顺序的错乱。
步骤S14,按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息。
由于批次号的分配顺序是按照消息到达生产缓存区的顺序分配的,即先到达消息缓存区的消息先分配批次号,后到达消息缓存区的消息后分配批次号,因此,Kafka代理按照批次号的分配顺序,分批向消费者提交消息,即将先分配批次号的批次的消息先提交给消费者,后分配批次号的批次的消息后提交给消费者,可以使先到达生产缓存区的消息先提交给消费者,后到达生产缓存区的消息后提交给消费者,在消息保存在不同分区的情况下,仍保证了消息在全局的顺序性。
在本公开实施例中,在消息生产时,按照消息到达生产缓存区的顺序和批次容量,为具有多个分区的主题的消息指定批次号,通过将所述生产缓存区中一个批次的消息,写入与该批次的批次号对应的分区中,使得同一主题的消息分布在不同的分区中提升了Kafka集群的利用率,通过在消费时,按照批次号的分配顺序,分批向消费者提交获取到的消息,使得同一主题的消息的消费顺序与生产顺序一致,保证了消息的全局顺序消费。因此,根据本公开各方面实施例的消息处理方法及装置,既能够保证消息的全局顺序消费,又提升了Kafka集群的利用率。
需要说明的是,本公开实施例中全局顺序,是以消息到达生产缓存区的顺序作为标准顺序的。如果因为生产过程中的一些网络震荡等问题导致的消息没有按照时间等顺序的要求到达Kafka代理的生产缓存区,Kafka代理是无法判断这个顺序是错乱了的。本公开实施例是针对多分区的Kafka代理中消息的顺序消费,而不是保证消息生产的顺序性。
图4示出根据本公开一实施例的消息处理方法的流程图。如图4所示,步骤S14按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息,可包括:
步骤S141,将获取到的各批次的消息,分批存储在消费缓存区中。
步骤S142,从所述消费缓存区中存放的各批次的消息中,分别获取各批次的批次号。
步骤S143,按照批次号由先到后的分配顺序,依次将所述消费缓存区各批次的消息提交至所述消费者。
消费缓存区可以用于存储消费者订阅的主题的消息。Kafka代理从指定主题对应的各分区中分别获取指定数量的批次的消息后,可以将获取到的各批次的消息,分批存储在消费缓存区。
在一种可能的实现方式中,Kafka代理在将消息写入分区时,可以将该消息所属批次的批次号添加在该消息中。这样,指定主题的分区中存储的消息也就携带有该消息所属批次的批次号。
Kafka代理可以从消费缓存区中存放的各批次的消息中,分别获取各批次的批次号。在一个示例中,对于消费缓存区中每一个批次,Kafka代理可以从该批次的任意一条消息中获取该批次的批次号。
Kafka代理可以照批次号的由先到后的分配顺序,依次将所述消费缓存区中各批次的消息提交至消费者。这样,Kafka代理可以将所述消费缓存区中先分配批次号的批次的消息先提交至所述消费者,后分配批次号的批次的消息后提交至所述消费者,保证了消息提交消费者的顺序与消息到达生产缓存区的顺序一致。
举例来说,图5示出本公开实施例的消息消费过程的一个示例性的示意图。对于指定主题的消息,假设之前已将完成了批次0(批次号为0的批次)的消息的提交,且指定主题的批次容量为3,指定主题的分区数量为3(包括分区0、分区1和分区2),指定数量为1,根据步骤S141至步骤S143继续进行消息的消费,消费过程如图5所示。如图5所示,Kafka代理将分别从分区0、分区1和分区2获取的1个批次的消息,分批存储在消费缓存区中,此时消费缓存区中存储有三个批次的消息,包括批次1、批次2和批次3。Kafka代理从三个批次的消息中,分别获取三个批次的批次号为3、1和2。在这三个批次号的分配顺序为1、2和3时,Kafka代理依次将批次1、批次2和批次3提交至消费者。
在一种可能的实现方式中,针对每个批次,接收到消费者返回的针对该批次的确认消息时,从所述消费缓存区中删除该批次的消息。
其中,确认消息表示消费者已经收到了某个批次的消息,即该批次的消息已经完成消费,Kafka代理从消费缓存区中可以删除该批次的消息,以便于Kafka代理继续进行其他消息的消费。
在一种可能的实现方式中,确认消息可以携带有批次号,Kafka代理接收到确认消息时,可以从确认消息中获取批次号,并从消费缓存区中删除该批次号对应批次的消息。
在一种可能的实现方式中,在所述消费缓存区中存放的消息处理完毕后,从所述指定主题的各分区中分别获取指定数量的批次的消息。
在一个示例中,如图5所示,消费缓存区中存储有批次1、批次2和批次3,其中,最先分配批次号的批次为批次1,Kafka代理可以将批次1的消息发送至消费者,接收到消费者针对批次1的确认消息时,从消费缓存区中删除批次1的消息。此时,消费缓存区中存储有批次2和批次3,其中,最先分配批次号的批次为批次2,Kafka代理可以将批次2的消费发送至消费者,接收到消费者针对批次2的确认消息时,从消费缓存区中删除批次2。此时,消费缓存区中存储有批次3,其中,最先分配批次号的批次为批次3,Kafka代理可以将批次3的消息发送至消费者,接收到消费者针对批次3的确认消息时,从消费缓存区中删除批次3。此时,消费缓存区中存放的消息处理完毕,Kafka代理可以继续从指定主题的各分区中获取指定数量的批次的消息。这些消息的处理方式可以参照步骤S141至步骤S143,这里不再赘述。
图6示出根据本公开一实施例的消息处理装置的框图。如图6所示,该装置60可包括:
分配模块61,用于接收到指定主题的消息时,按照所述消息到达生产缓存区的顺序和所述指定主题的批次容量,为所述消息分配批次号;所述批次容量为一个批次包含的消息的数量,所述批次号用于标识消息所属的批次;
写入模块62,用于在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中;
获取模块63,用于从所述指定主题对应的各分区中分别获取指定数量的批次的消息;
提交模块64,用于按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息。
在本公开实施例中,在消息生产时,按照消息到达生产缓存区的顺序和批次容量,为具有多个分区的主题的消息指定批次号,通过将所述生产缓存区中一个批次的消息,写入与该批次的批次号对应的分区中,使得同一主题的消息分布在不同的分区中提升了Kafka集群的利用率,通过在消费时,按照批次号的分配顺序,分批向消费者提交获取到的消息,使得同一主题的消息的消费顺序与生产顺序一致,保证了消息的全局顺序消费。因此,根据本公开各方面实施例的消息处理方法及装置,既能够保证消息的全局顺序消费,又提升了Kafka集群的利用率。
在一种可能的实现方式中,指定主题的分区中存储的消息中携带有所属批次的批次号,所述提交模块64具体可用于:
将获取到的各批次的消息,分批存储在消费缓存区中;
从所述消费缓存区中存放的各批次的消息中,分别获取各批次的批次号;
按照批次号由先到后的分配顺序,依次将所述消费缓存区中各批次的消息提交至所述消费者。
图7示出根据本公开一实施例的消息处理装置的框图。如图7所示,在一种可能的实现方式中,所述装置60还可包括:
第一删除模块65,用于针对每个批次,接收到消费者返回的针对该批次的确认消息时,从所述消费缓存区中删除该批次的消息。
在一种可能的实现方式中,所述写入模块62具体可用于:
根据所述批次号和所述指定主题的分区数量,确定所述批次号对应的分区号;
将所述批次号对应的消息写入所确定的分区号对应的分区中。
在一种可能的实现方式中,所述装置60还可包括:
第二删除模块66,用于在确认写入完成时,从所述生产缓存区中删除所述批次号对应的消息。
图8是根据一示例性实施例示出的一种用于消息处理装置900的框图。参照图8,该装置900可包括处理器901、存储有机器可执行指令的机器可读存储介质902。处理器901与机器可读存储介质902可经由系统总线903通信。并且,处理器901通过读取机器可读存储介质902中与消息处理逻辑对应的机器可执行指令以执行上文所述的消息处理方法。
本文中提到的机器可读存储介质902可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (8)
1.一种消息处理方法,其特征在于,所述方法包括:
接收到指定主题的消息时,按照所述消息到达生产缓存区的顺序和所述指定主题的批次容量,为所述消息分配批次号;所述批次容量为一个批次包含的消息的数量,所述批次号用于标识消息所属的批次;
在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中;
从所述指定主题对应的各分区中分别获取指定数量的批次的消息;
按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息;
指定主题的分区中存储的消息中携带有所属批次的批次号,按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息,包括:
将获取到的各批次的消息,分批存储在消费缓存区中;
从所述消费缓存区中存放的各批次的消息中,分别获取各批次的批次号;
按照批次号由先到后的分配顺序,依次将所述消费缓存区中各批次的消息提交至所述消费者。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
针对每个批次,接收到消费者返回的针对该批次的确认消息时,从所述消费缓存区中删除该批次的消息。
3.根据权利要求1所述的方法,其特征在于,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中,包括:
根据所述批次号和所述指定主题的分区数量,确定所述批次号对应的分区号;
将所述批次号对应的消息写入所确定的分区号对应的分区中。
4.根据权利要求1所述的方法,其特征在于,在将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中之后,所述方法还包括:
在确认写入完成时,从所述生产缓存区中删除所述批次号对应的消息。
5.一种消息处理装置,其特征在于,所述装置包括:
分配模块,用于接收到指定主题的消息时,按照所述消息到达生产缓存区的顺序和所述指定主题的批次容量,为所述消息分配批次号;所述批次容量为一个批次包含的消息的数量,所述批次号用于标识消息所属的批次;
写入模块,用于在所述生产缓存区中所述批次号对应的消息的数量达到所述批次容量时,将所述批次号对应的消息按照消息到达所述生产缓存区的顺序写入所述批次号对应的分区中;
获取模块,用于从所述指定主题对应的各分区中分别获取指定数量的批次的消息;
提交模块,用于按照批次号的分配顺序,分批向消费者提交获取到的指定数量的批次的消息;
指定主题的分区中存储的消息中携带有所属批次的批次号,所述提交模块具体用于:
将获取到的各批次的消息,分批存储在消费缓存区中;
从所述消费缓存区中存放的各批次的消息中,分别获取各批次的批次号;
按照批次号由先到后的分配顺序,依次将所述消费缓存区中各批次的消息提交至所述消费者。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
第一删除模块,用于针对每个批次,接收到消费者返回的针对该批次的确认消息时,从所述消费缓存区中删除该批次的消息。
7.根据权利要求5所述的装置,其特征在于,所述写入模块具体用于:
根据所述批次号和所述指定主题的分区数量,确定所述批次号对应的分区号;
将所述批次号对应的消息写入所确定的分区号对应的分区中。
8.根据权利要求5所述的装置,其特征在于,所述装置还包括:
第二删除模块,用于在确认写入完成时,从所述生产缓存区中删除所述批次号对应的消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811407856.5A CN109684099B (zh) | 2018-11-23 | 2018-11-23 | 消息处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811407856.5A CN109684099B (zh) | 2018-11-23 | 2018-11-23 | 消息处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684099A CN109684099A (zh) | 2019-04-26 |
CN109684099B true CN109684099B (zh) | 2020-12-25 |
Family
ID=66185486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811407856.5A Active CN109684099B (zh) | 2018-11-23 | 2018-11-23 | 消息处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684099B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111741041B (zh) * | 2019-07-10 | 2023-05-12 | 北京京东尚科信息技术有限公司 | 消息处理方法及其装置、电子设备及计算机可读介质 |
CN110688228A (zh) * | 2019-10-09 | 2020-01-14 | 北京思特奇信息技术股份有限公司 | 一种分布式系统消息时序保障的方法、系统及电子设备 |
CN111031135B (zh) * | 2019-12-17 | 2023-01-10 | 金瓜子科技发展(北京)有限公司 | 消息传送方法、装置及电子设备 |
CN111158931A (zh) * | 2019-12-30 | 2020-05-15 | 联想(北京)有限公司 | 一种针对Kafka分区的数据动态均衡方法、装置及存储介质 |
CN111400065B (zh) * | 2020-03-13 | 2023-04-14 | 百融云创科技股份有限公司 | 一种分离全局zookeeper的pulsar消息异地多活方法及系统 |
CN113296977B (zh) * | 2021-02-24 | 2023-04-07 | 阿里巴巴集团控股有限公司 | 一种消息处理方法及装置 |
CN113093994A (zh) * | 2021-04-08 | 2021-07-09 | 中国工商银行股份有限公司 | 一种数据处理方法及装置 |
CN113163009A (zh) * | 2021-04-20 | 2021-07-23 | 平安消费金融有限公司 | 数据传送方法、装置、电子设备及存储介质 |
CN115801787B (zh) * | 2023-01-29 | 2023-07-07 | 智道网联科技(北京)有限公司 | 路端数据传输方法、装置及电子设备、存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
CN106375200A (zh) * | 2016-11-08 | 2017-02-01 | 上海找钢网信息科技股份有限公司 | 消息系统及消息处理方法 |
CN107332719A (zh) * | 2017-08-16 | 2017-11-07 | 北京云端智度科技有限公司 | 一种cdn系统内日志实时分析的方法 |
-
2018
- 2018-11-23 CN CN201811407856.5A patent/CN109684099B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
CN106375200A (zh) * | 2016-11-08 | 2017-02-01 | 上海找钢网信息科技股份有限公司 | 消息系统及消息处理方法 |
CN107332719A (zh) * | 2017-08-16 | 2017-11-07 | 北京云端智度科技有限公司 | 一种cdn系统内日志实时分析的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109684099A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684099B (zh) | 消息处理方法及装置 | |
CN107391629B (zh) | 集群间数据迁移方法、系统、服务器及计算机存储介质 | |
US20230195346A1 (en) | Technologies for coordinating disaggregated accelerator device resources | |
CN108055343B (zh) | 用于机房的数据同步方法及装置 | |
CN110069346B (zh) | 多进程间资源共享方法、装置、电子设备 | |
CN109271106B (zh) | 消息存储、读取方法及装置、服务器、存储介质 | |
CN109376197B (zh) | 一种数据同步方法、服务器及计算机存储介质 | |
CN105468300B (zh) | Ip硬盘的管理方法和装置 | |
CN106874459B (zh) | 流式数据存储方法及装置 | |
US11237761B2 (en) | Management of multiple physical function nonvolatile memory devices | |
CN108845877B (zh) | 管理内存的方法、装置和系统 | |
US10055153B2 (en) | Implementing hierarchical distributed-linked lists for network devices | |
CN107368260A (zh) | 基于分布式系统的存储空间整理方法、装置及系统 | |
US10320906B2 (en) | Self-organizing storage system for asynchronous storage service | |
CN111126604A (zh) | 模型训练方法、装置、服务器及存储介质 | |
CN108337116B (zh) | 消息保序方法及装置 | |
CN113885797B (zh) | 一种数据存储方法、装置、设备及存储介质 | |
US8560698B2 (en) | Allocating unique identifiers using metadata | |
CN112596949B (zh) | 一种高效率的ssd删除数据恢复方法及系统 | |
CN114827156A (zh) | 消息调度的方法、装置、设备及存储介质 | |
US20200394077A1 (en) | Map reduce using coordination namespace hardware acceleration | |
CN102521163A (zh) | 目录替换方法及设备 | |
CN115409507A (zh) | 区块处理方法、区块处理装置、计算机设备及存储介质 | |
CN106682199B (zh) | 一种实现Mongos集群自动化扩容的方法和装置 | |
CN109376001A (zh) | 一种资源分配的方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |