CN111078422A - 消息处理方法、消息处理装置、可读存储介质、电子设备 - Google Patents
消息处理方法、消息处理装置、可读存储介质、电子设备 Download PDFInfo
- Publication number
- CN111078422A CN111078422A CN201911136173.5A CN201911136173A CN111078422A CN 111078422 A CN111078422 A CN 111078422A CN 201911136173 A CN201911136173 A CN 201911136173A CN 111078422 A CN111078422 A CN 111078422A
- Authority
- CN
- China
- Prior art keywords
- offset
- message
- state
- linked list
- processing
- 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.)
- Granted
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/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- 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)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种消息处理方法、消息处理装置、计算机可读存储介质和电子设备,涉及互联网技术领域。该消息处理方法配置于分布式发布订阅消息***中,其中,消息处理方法包括:获取一目标分区的偏移量状态链表;其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态;响应针对偏移量状态链表的状态更新请求;对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列;其中,目标偏移量为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。本公开可以提高消息的处理速率。
Description
技术领域
本公开涉及互联网技术领域,具体而言,涉及一种消息处理方法、消息处理装置、计算机可读存储介质和电子设备。
背景技术
随着信息技术的迅猛发展,大数据的***式增长,消息处理平台处理消息的能力不再能满足人们的需求。例如,针对分布式发布订阅消息***(kafka),由于受到自身架构设计的约束,分布式发布订阅消息***不能满足处理大量消息的需求。
分布式发布订阅消息***的架构设计可以包括以下几点:在创建一个主题的同时确定了该主题内的分区数量;一个分区只能与一个消费者进程连接;一个分区将生产的消息根据推送到分区的先后顺序进行存储,而且在同一分区中提交消息偏移量的过程是根据存储到分区的先后顺序进行提交的;在kafka中,前一个消息的偏移量提交成功后,消费者才能对下一个消息进行消费。然而,在消息数量较大的情况下,单进程的消费者在kafka中可以消费消息,并提交消息的偏移量,却会因消息处理速率低而造成消息堆积的问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种消息处理方法、消息处理装置、计算机可读存储介质及电子设备,进而至少在一定程度上克服由于现有技术的限制和缺陷而导致消息处理速率低的问题。
根据本公开的第一个方面,提供一种消息处理方法,应用于分布式发布订阅消息***中,消息处理方法包括:获取一目标分区的偏移量状态链表;其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态;响应针对偏移量状态链表的状态更新请求;对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列;其中,目标偏移量为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。
根据本公开的第二个方面,提供一种消息处理装置,配置于分布式发布订阅消息***中,消息处理装置包括:链表获取模块,用于获取一目标分区的偏移量状态链表;其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态;请求响应模块,用于响应针对偏移量状态链表的状态更新请求;偏移量确定模块,用于对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列;其中,目标偏移量为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。
可选地,请求响应模块还可以被配置为执行:每隔第一预设时长响应针对偏移量状态链表的状态更新请求。
可选地,链表获取模块还可以被配置为执行:获取当前消息所属分区的偏移量状态链表;若检测到偏移量状态链表中未存储当前消息的处理状态和偏移量,则在偏移量状态链表末端添加一存储节点,以存储当前消息的处理状态和偏移量。
可选地,信息更新指令为将当前消息的处理状态更新为已处理的指令,消息处理装置还可以包括:指令响应模块,用于若当前消息已被处理,则响应信息更新指令,存储更新后的当前消息的处理状态。
可选地,消息处理装置还可以包括:节点处理模块,可以被配置为执行:确定偏移量状态链表中处理状态为已提交的存储节点;将处理状态为已提交的存储节点丢弃。
可选地,消息处理装置还可以包括:偏移量提交模块,用于若消息队列响应未接收到目标偏移量,则重新提交目标偏移量。
可选地,消息处理装置还可以包括:信息发送模块,可以被配置为执行:若每隔第二预设时长未接收到所述状态更新请求,则发送提醒信息。
根据本公开的第三个方面,提供一种消息处理***,配置于分布式发布订阅消息***中,消息处理***包括:链表确定装置,用于确定一目标分区的偏移量状态链表;其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态;偏移量监控装置,用于发送针对偏移量状态链表的状态更新请求;消息处理装置,用于获取偏移量状态链表,响应状态更新请求,对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列;其中,目标偏移量为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。
根据本公开的第四个方面,提供一种计算机可读存储介质,其上存储有计算机程序,程序被处理器执行时实现如上述的消息处理方法。
根据本公开的第五个方面,提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个序被一个或多个处理器执行时,使得一个或多个处理器实现如上述的消息处理方法。
本公开的示例性实施例具有以下有益效果:
本公开的消息处理方法配置于分布式订阅消息***,首先,获取一目标分区的偏移量状态链表;然后,响应针对偏移量状态链表的状态更新请求,随后,对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列。其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态,目标偏移量为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。处理状态是一个消费者进程里多线程对一个分区的各历史消息进行乱序处理后,得到的各历史消息的处理状态。一方面,由于本公开可以通过一个消费者进程里多线程对一个分区的各历史消息进行乱序处理后,再针对各历史消息的处理状态进行遍历操作,也就是说,可以先对消息进行处理,再等待提交消息的偏移量,避免了分布式订阅消息***等待消息队列接收到前一个消息的偏移量,再对后一个的消息进行处理的过程。因此,本公开的消息处理方法降低了等待消息处理的时延,提高了处理消息的速率。另一方面,本公开提交至消息队列的目标偏移量是在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量,该过程提高了按照分区消息存储的顺序提交偏移量规则的准确性,即减少了在分布式订阅消息***中消息被处理后再提交消息偏移量的差错率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出了根据本公开的示例性实施方式的一种消息处理方法的流程图;
图2示意性示出了根据本公开的示例性实施方式的一种消息处理方法的交互流程图;
图3示意性示出了根据本公开的示例性实施方式的消息处理装置的方框图;
图4示意性示出了根据本公开的另一示例性实施方式的消息处理装置的方框图;
图5示意性示出了根据本公开的另一示例性实施方式的消息处理装置的方框图;
图6示意性示出了根据本公开的另一示例性实施方式的消息处理装置的方框图;
图7示意性示出了根据本公开的另一示例性实施方式的消息处理装置的方框图;
图8示意性示出了根据本公开的示例性实施方式的一种消息处理***的方框图;
图9示意性示出了根据本公开的示例性实施方式的电子设备的方框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
需要说明的是,本公开中,用语“包括”、“包含”用以表示开放式的包括在内的意思,并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等。另外,本公开所用的术语“第一”、“第二”仅是为了区分的目的,不应当作为本公开内容的限制。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的步骤。例如,有的步骤还可以分解,而有的步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
为了便于理解,首先对本方案涉及的场景进行解释。
近年来,互联网领域各大应用***规模不断扩大,数据量呈指数型增长的趋势。行业厂商研发了开源流处理平台来解决数据处理问题,但在处理过程中,仍会因开源流处理平台的架构设计问题达到处理消息的瓶颈。例如,分布式发布订阅消息***。
在分布式发布订阅消息***的架构设计中,一个分区只能与一个消费者进程连接;一个分区将消息按推送至分区的先后顺序进行存储,而且在同一分区中提交消息偏移量的过程是按照消息存储至分区的先后顺序进行提交的。另外,单进程的消费者能够消费消息,并正确提交消息的偏移量,但面对生产者产生的数据量较大,消息队列中的消息也比较多的情况,会造成分布式发布订阅消息***中消息堆积的问题。目前提出的技术方案是增加分布式发布订阅消息***中一个主题的分区数量,同时增加消费者进程数量,但由于消息数量太多,执行分区数量更改的操作会导致分布式发布订阅消息***的开销很大。因此,如何在分布式发布订阅消息***中提高消息的处理速率,是目前大数据时代需要解决的问题。
需要说明的是,在本公开的示例性实施方式中,下面所述的消息处理方法通常可以由服务器来实现,也就是说,可以由服务器执行消息处理方法的各个步骤,在这种情况下,消息处理装置可以配置在消息处理***中,那么,消息处理***可以配置在该服务器中。
如图1所示,本公开的示例性实施方式的消息处理方法可以包括以下步骤:
S102.获取一目标分区的偏移量状态链表。
在本公开的示例性实施方式中,kafka消息队列需要确定一分区中当前提交的消息的偏移量,以进行后续消息的处理操作。那么,该分区可以为目标分区。其中,偏移量可以为一消息在一个分区中的位置信息。
偏移量状态链表可以包括目标分区中各历史消息的偏移量以及各历史消息的处理状态。具体地,偏移量状态链表可以由多个存储节点构成,每个存储节点中又可以包括目标分区中对应历史消息的偏移量以及对应历史消息的处理状态,且各历史消息的处理状态可以是未提交消息的偏移量的处理状态。也就是说,各历史消息的消息处理状态的种类可以是:消息已处理且未提交消息的偏移量的处理状态,消息未处理的处理状态,也就是消息未处理且未提交消息的偏移量的处理状态。
需要说明的是,在本示例实施例中,消息已处理且未提交消息的偏移量的处理状态可以为:一个消费者进程里多线程可以对一个分区中的至少两个历史消息不按照正常顺序进行处理,但可以按照正常顺序提交消息的偏移量。Kafka中正常处理消息的顺序可以是,按照分区中存储消息的先后顺序进行处理,正常顺序提交消息的偏移量可以是,按照分区中存储消息的先后顺序进行提交。
例如,针对一个消费者进程消费消息的场景,一个消费者进程里具有第一线程、第二线程以及第三线程。一个分区按消息存储至分区的先后顺序包含有:第一个消息、第二个消息和第三个消息,在kafka***需要服务器提交分区中当前提交的消息的偏移量情况下,服务器可以按照消息存储至分区的先后顺序提交消息的偏移量。
第一线程可以将第一个消息处理成功,且服务器正在提交第一个消息的偏移量;第二线程可以将第二个消息处理成功,且服务器可以等待第一个消息的偏移量提交成功后再提交第二个消息的偏移量;第三线程可以将第三个消息处理成功,且服务器可以等待第二个消息的偏移量提交成功后再提交第三个消息的偏移量。
根据本公开的示例性实施例,服务器可以获取当前消息所属的分区的偏移量状态链表,若检测到偏移量状态链表中未存储当前消息的处理状态和偏移量,则在偏移量状态链表末端添加一存储节点,以存储当前消息的处理状态和偏移量。
当前消息可以是一个消费者进程里一个线程正在处理的一个消息,且该消息可以包含在一个分区中,也就是说,该分区为当前消息所属的分区。
在本公开的示例性实施方式中,当前消息的头部可以包含所属分区的标识,其中,分区标识可以是分区的编号即数字,也可以是分区的名称等等。例如,分区标识可以是1、2、分区1、分区2等等。服务器可以根据当前消息包含的所属分区的标识,也就是说,服务器可以确定出获取到的偏移量状态链表为当前消息所属分区的偏移量状态链表。
偏移量状态链表中的每个存储节点都是由服务器添加至偏移量状态链表中,也就是说,偏移量状态链表的初始状态是空的,服务器按照消息存储到分区的顺序为每个消息添加一个存储节点。
S104.响应针对偏移量状态链表的状态更新请求。
在本公开的示例性实施方式中,为了使kafka消息队列获取一个分区中当前提交的消息的偏移量,服务器接收到针对偏移量状态链表执行遍历操作,进而获得分区中当前提交的消息的偏移量的请求,即该请求可以称为状态更新请求。其中,遍历操作可以是,服务器按照各历史消息的处理状态存储至偏移量状态链表先后顺序,一个接一个地将处理状态与使遍历操作停止的处理状态进行比对。
根据本公开的示例性实施例,偏移量监控装置可以每间隔固定时长向消息处理装置发送针对偏移量状态链表的状态更新请求,也就是说,服务器每隔第一预设时长响应针对偏移量状态链表的状态更新请求。其中,固定时长可以为第一预设时长。
S106.偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列。
在本公开的示例性实施方式中,一个分区中的偏移量状态链表是单向的链表,也就是说,服务器可以从偏移量状态链表的头部开始,对偏移量状态链表针对处理状态进行遍历操作。
在本公开的示例性实施方式中,为了确定出目标偏移量并提交至消息队列,可以对偏移量状态链表进行遍历操作,而使得遍历操作停止的处理状态是未处理的处理状态,其中,未处理是指,消息未被处理,也未将消息的偏移量提交至消息队列。
目标偏移量是指为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。其中,已处理且未提交是指,消息已经被处理但未将消息的偏移量提交至消息队列。
例如,在一个分区的偏移量状态链表中包含:第一个存储节点、第二个存储节点、第三个存储节点以及第四个存储节点,该4个存储节点添加到偏移量状态链表顺序是按照消息存储到分区的先后顺序。
第一个存储节点中消息的处理状态为已处理且未提交,消息的偏移量为1;第二个存储节点中消息的处理状态为已处理且未提交,消息的偏移量为2;第三个存储节点中消息的处理状态为未提交,消息的偏移量为3;第四个存储节点中消息的处理状态为已处理且未提交,消息的偏移量为4。
在服务器响应状态更新请求的情况下,从偏移量状态链表的第一个存储节点开始进行遍历操作,遍历操作的停止条件是消息的处理状态为未处理。
首先,服务器将每个存储节点中消息的处理状态与遍历操作的停止条件进行比对,第一个和第二个存储节点中消息的处理状态都为已处理且未提交,接着,比对第三个存储节点中消息的处理状态,结果是消息的处理状态相同,则停止遍历,并确定出遍历过程中最后一个处理状态为已处理且未提交的历史消息的偏移量,即第二个存储节点中消息的偏移量,随后,将第二个存储节点中消息的偏移量提交至消息队列。
需要说明的是,在该过程中,因为偏移量状态链表出现了第一个和第二个存储节点中消息的处理状态都为已处理且未提交,可以认为第一个存储节点中偏移量已提交,也就是说,第二个存储节点中消息的偏移量是目标偏移量,是服务器需要获取的该分区中当前提交的消息的偏移量。
根据本公开的示例性实施例,信息更新指令为将所述当前消息的处理状态更新为已处理的指令,该信息更新指令可以由消息处理***执行,即消息处理***将当前消息的处理状态更新为已处理。若对当前消息已进行处理,服务器可以响应信息更新指令,存储更新后的当前消息的处理状态。也就是说,消息处理***将当前消息的处理状态更新为已处理,并将更新后的处理状态发送该服务器,接着,服务器将存储更新后的当前消息的处理状态。
服务器对偏移量状态链表针对处理状态进行遍历操作的情况下,可以根据更新后的处理状态进行后续的操作。
需要说明的是,消息队列接收到提交的目标偏移量后,将目标分区的偏移量记录更新为目标偏移量。其中,偏移量记录是指在历史的某一时刻一分区中处理消息的位置记录。根据本公开的一个实施例,若消息队列未接收到目标偏移量,消息队列则可以向服务器响应未接收到目标偏移量,服务器将重新提交目标偏移量。
根据本公开的示例性实施例,服务器可以确定偏移量状态链表中处理状态为已提交的存储节点;并将处理状态为已提交的存储节点丢弃。服务器将该存储节点丢弃后,在对偏移量状态链表进行针对处理状态的遍历操作的情况下,将不再考虑该存储节点。
也就是说,服务器在进行遍历操作的情况下,偏移量状态链表中只包含两种处理状态,一种处理状态为:消息已处理且未提交消息的偏移量的,另一种处理状态为:消息未处理且未提交消息的偏移量的处理状态。
在本公开的示例性实施方式中,若每隔第二预设时长未接收到所述状态更新请求,则发送提醒信息。
服务器若在一段固定时长后未接收状态更新请求,就会发送提醒信息给偏移量监控装置。其中,提醒信息可以包含一段文字,也可以包含一种具有提醒意义的标识,例如,颜色等,能实现提醒作用的信息都可以属于本公开保护范围内。另外,上述一段固定时长可以为第二预设时长,且第二预设时长大于上述第一预设时长。
在本公开的示例性实施方式中,服务器可以发送提醒信息,可以用于避免偏移量监控装置长时间没有发送针对偏移量状态链表的状态更新请求,使得服务器未获取一个分区中当前提交的消息的偏移量,进而无法进行后续消息的处理。
本公开的示例性实施方式的消息处理方法可以先对消息进行处理,再等待服务器提交消息的偏移量,避免了等待消息队列接收到前一个消息的偏移量再对后一个消息进行处理的过程。该消息处理方法降低了等待消息处理的时延,提高了处理消息的速率。
应当注意,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
参考图2,本示例实施方式中还提供了一种消息处理方法的交互流程图。具体地,在步骤S201中,链表确定装置确定目标分区的偏移量状态链表,其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态;在步骤S203中,链表确定装置将确定出的偏移量状态链表发送至消息处理装置;在步骤S205中,偏移量监控装置发送针对偏移量状态链表的状态更新请求;在步骤S207中,消息处理装置响应步骤S205中的状态更新请求;在步骤S209中,消息处理装置对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定出目标偏移量;在步骤S211中,消息处理装置将目标偏移量提交至消息队列。其中,目标偏移量为最后一个处理状态为已处理且未提交的历史消息的偏移量。
在本公开的示例性实施方式中,偏移量监控装置可以先发送状态更新请求,然后,链表确定装置可以确定目标分区的偏移量状态链表,接着,链表确定装置发送偏移量状态链表至消息处理装置,随后,消息处理装置响应状态更新请求,并执行后续的步骤。
根据本公开的一个实施例,链表确定装置可以根据当前消息包含的分区标识确定当前消息所属的分区,并将当前消息所属的分区确定为目标分区。其中,当前消息可以是一个消费者进程里一个线程正在处理的一个消息,且该消息可以包含在一个分区中,也就是说,该分区为当前消息所属的分区。
在本公开的示例性实施方式中,消息处理装置可以每隔第一预设时长响应针对偏移量状态链表的状态更新请求,也就是说,偏移量监控装置可以每间隔固定时长向消息处理装置发送针对偏移量状态链表的状态更新请求,以使kafka消息队列每间隔固定时长接收到一个分区中当前提交的消息的偏移量。
例如,kafka***中,针对一个消费者进程里多个线程消费消息的场景。一个消费者进程消费一个分区中按消息存储至分区的先后顺序包含的消息,分别是:第一个消息、第二个消息、第三个消息以及第四个消息。该消费者进程可以包含第一线程、第二线程、第三线程以及第四线程。另外,在该分区的偏移量状态链表中也按照消息存储至分区的先后顺序添加了4个存储节点,分别是:第一个存储节点、第二个存储节点、第三个存储节点以及第四个存储节点。存储节点中存储了对应消息的处理状态和对应消息的偏移量。
其中,第一个存储节点中存储第一个消息的处理状态为已处理且未提交,第一个消息的偏移量为1;第二个存储节点中存储第二个消息的处理状态为已处理且未提交,第二个消息的偏移量为2;第三个存储节点中存储第三个消息的处理状态为未提交,第三个消息的偏移量为3;第四个存储节点中存储第四个消息的处理状态为已处理且未提交,第四个消息的偏移量为4。
当kafka***的消息队列需要获取针对该消费者进程消费消息所属分区中当前提交消息的偏移量时,首先,偏移量监控装置可以发送针对偏移量状态链表的状态更新请求,然后,链表确定装置可以将该分区的偏移量状态链表发送至消息处理装置,接着,消息处理装置响应状态更新请求,从偏移量状态链表的第一个存储节点开始进行遍历操作,遍历操作的停止条件是消息的处理状态为未处理,随后,确定出目标偏移量并提交至消息队列。
消息处理装置对偏移量状态链表进行遍历操作的具体步骤是:
消息处理装置首先可以将每个存储节点中消息的处理状态与遍历操作的停止条件进行比对,第一个和第二个存储节点中消息的处理状态都为已处理且未提交,接着,比对第三个存储节点中存储的第三个消息的处理状态,结果是消息的处理状态相同,则停止遍历,并确定出遍历过程中最后一个处理状态为已处理且未提交的历史消息的偏移量,即第二个存储节点中存储的第二个消息的偏移量,随后,将第二个存储节点中存储的第二个消息的偏移量提交至kafka的消息队列。
需要说明的是,在该过程中,因为偏移量状态链表出现了第一个和第二个存储节点中消息的处理状态都为已处理且未提交,可以认为第一个存储节点中第一个消息的偏移量已提交,也就是说,第二个存储节点中存储的第二个消息的偏移量是目标偏移量,是服务器需要获取的一个分区中当前提交的消息的偏移量。
在针对一个消费者进程里多个线程消费消息的场景中,链表确定装置也可以先将该分区的偏移量状态链表发送至消息处理装置,然后,kafka***的消息队列需要获取针对该消费者进程消费消息所属分区中当前提交消息的偏移量时,偏移量监控装置可以发送针对偏移量状态链表的状态更新请求,接着,消息处理装置响应状态更新请求,从偏移量状态链表的第一个存储节点开始进行遍历操作,遍历操作的停止条件是消息的处理状态为未处理,随后,确定出目标偏移量并提交至消息队列。
根据本公开的示例性实施例,上述消息处理方法可以提交至消息队列的目标偏移量是在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量,该过程提高了按照分区消息存储的顺序提交偏移量规则的准确性,即减少了在分布式订阅消息***中处理消息的差错率。
进一步的,本示例实施方式中还提供了一种消息处理装置,应用于分布式发布订阅消息***中,参考图3,根据本公开的示例性实施方式的消息处理装置300可以包括:链表获取模块302、请求响应模块304以及偏移量确定模块306。
其中,链表获取模块302,用于获取一目标分区的偏移量状态链表;其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态;请求响应模块304,用于响应针对偏移量状态链表的状态更新请求;偏移量确定模块306,用于对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列;其中,目标偏移量为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。
根据本公开的示例性实施例,链表获取模块302还可以被配置为执行:获取当前消息所属分区的偏移量状态链表;若检测到偏移量状态链表中未存储当前消息的处理状态和偏移量,则在偏移量状态链表末端添加一存储节点,以存储当前消息的处理状态和偏移量。
根据本公开的示例性实施例,请求响应模块304还可以被配置为执行:每隔第一预设时长响应针对偏移量状态链表的状态更新请求。
根据本公开的示例性实施例,信息更新指令为将当前消息的处理状态更新为已处理的指令,参考图4,与消息处理装置300相比,消息处理装置400还可以包括:指令响应模块401,用于若当前消息已被处理,则响应信息更新指令,存储更新后的当前消息的处理状态。
根据本公开的示例性实施例,参考图5,与消息处理装置300相比,消息处理装置500还可以包括:节点处理模块502,可以被配置为执行:确定偏移量状态链表中处理状态为已提交的存储节点;将处理状态为已提交的存储节点丢弃。
根据本公开的示例性实施例,参考图6,与消息处理装置300相比,消息处理装置600还可以包括:偏移量提交模块601,用于若消息队列响应未接收到目标偏移量,则重新提交目标偏移量。
根据本公开的示例性实施例,参考图7,与消息处理装置300相比,消息处理装置700还可以包括:信息发送模块702,可以被配置为执行:若每隔第二预设时长未接收到所述状态更新请求,则发送提醒信息。
本示例实施方式中还提供了一种消息处理***,应用于分布式发布订阅消息***中,参考图8,根据本公开的示例性实施方式的消息处理***800可以包括:链表确定装置801、偏移量监控装置803以及消息处理装置300。
其中,链表确定装置801,用于确定一目标分区的偏移量状态链表;其中,偏移量状态链表包括目标分区中各历史消息的偏移量以及各历史消息的处理状态;偏移量监控装置803,用于发送针对偏移量状态链表的状态更新请求;消息处理装置300,用于获取偏移量状态链表,响应状态更新请求,对偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将目标偏移量提交至消息队列;其中,目标偏移量为在遍历偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为***、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“***”。
下面参照图9来描述根据本发明的这种实施方式的电子设备900。图9显示的电子设备900仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图9所示,电子设备900以通用计算设备的形式表现。电子设备900的组件可以包括但不限于:上述至少一个处理单元910、上述至少一个存储单元920、连接不同***组件(包括存储单元920和处理单元910)的总线930、显示单元940。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元910执行,使得所述处理单元910执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元910可以执行如图1所示的步骤S102至步骤S106。
存储单元920可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)9201和/或高速缓存存储单元9202,还可以进一步包括只读存储单元(ROM)9203。
存储单元920还可以包括具有一组(至少一个)程序模块9205的程序/实用工具9204,这样的程序模块9205包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线930可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、***总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备900也可以与一个或多个外部设备1000(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备900的设备通信,和/或与使得该电子设备900能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口950进行。并且,电子设备900还可以通过网络适配器960与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器960通过总线930与电子设备900的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备900使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (10)
1.一种消息处理方法,应用于分布式发布订阅消息***中,所述消息处理方法包括:
获取一目标分区的偏移量状态链表;其中,所述偏移量状态链表包括所述目标分区中各历史消息的偏移量以及各所述历史消息的处理状态;
响应针对所述偏移量状态链表的状态更新请求;
对所述偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将所述目标偏移量提交至消息队列;
其中,所述目标偏移量为在遍历所述偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。
2.根据权利要求1所述的消息处理方法,其特征在于,响应针对所述偏移量状态链表的状态更新请求包括:
每隔第一预设时长响应针对所述偏移量状态链表的状态更新请求。
3.根据权利要求1或2所述的消息处理方法,其特征在于,获取一目标分区的偏移量状态链表包括:
获取当前消息所属分区的偏移量状态链表;
若检测到所述偏移量状态链表中未存储所述当前消息的处理状态和偏移量,则在所述偏移量状态链表末端添加一存储节点,以存储所述当前消息的处理状态和偏移量。
4.根据权利要求3所述的消息处理方法,其特征在于,信息更新指令为将所述当前消息的处理状态更新为已处理的指令,所述消息处理方法还包括:
若所述当前消息已被处理,则响应所述信息更新指令,存储更新后的所述当前消息的处理状态。
5.根据权利要求1或2所述的消息处理方法,其特征在于,所述消息处理装置还包括:
确定所述偏移量状态链表中处理状态为已提交的存储节点;
将所述处理状态为已提交的存储节点丢弃。
6.根据权利要求1或2所述的消息处理方法,其特征在于,所述消息处理方法还包括:
若所述消息队列响应未接收到所述目标偏移量,则重新提交所述目标偏移量。
7.根据权利要求1或2所述的消息处理方法,其特征在于,所述消息处理方法还包括:
若每隔第二预设时长未接收到所述状态更新请求,则发送提醒信息。
8.一种消息处理***,其特征在于,配置于分布式发布订阅消息***中,所述消息处理***包括:
链表确定装置,用于确定一目标分区的偏移量状态链表;其中,所述偏移量状态链表包括所述目标分区中各历史消息的偏移量以及各所述历史消息的处理状态;
偏移量监控装置,用于发送针对所述偏移量状态链表的状态更新请求;
消息处理装置,用于获取所述偏移量状态链表,响应所述状态更新请求,对所述偏移量状态链表进行针对处理状态的遍历操作,直至确定出处理状态为未处理,以确定目标偏移量,将所述目标偏移量提交至消息队列;
其中,所述目标偏移量为在遍历所述偏移量状态链表过程中确定出的最后一个处理状态为已处理且未提交的历史消息的偏移量。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至7任一项所述的消息处理方法。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至7任一项所述的消息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911136173.5A CN111078422B (zh) | 2019-11-19 | 2019-11-19 | 消息处理方法、消息处理装置、可读存储介质、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911136173.5A CN111078422B (zh) | 2019-11-19 | 2019-11-19 | 消息处理方法、消息处理装置、可读存储介质、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078422A true CN111078422A (zh) | 2020-04-28 |
CN111078422B CN111078422B (zh) | 2023-09-12 |
Family
ID=70311193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911136173.5A Active CN111078422B (zh) | 2019-11-19 | 2019-11-19 | 消息处理方法、消息处理装置、可读存储介质、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078422B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897662A (zh) * | 2020-07-01 | 2020-11-06 | 中国建设银行股份有限公司 | 偏移量处理方法、装置、电子设备及计算机可读存储介质 |
CN112069438A (zh) * | 2020-09-10 | 2020-12-11 | 北京五八信息技术有限公司 | 消息合并方法、消息处理方法和装置、设备和介质 |
CN112954007A (zh) * | 2021-01-26 | 2021-06-11 | 深圳前海微众银行股份有限公司 | 消息传输方法、装置、设备及存储介质 |
CN113297309A (zh) * | 2021-05-31 | 2021-08-24 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN115016860A (zh) * | 2022-06-07 | 2022-09-06 | 蚂蚁区块链科技(上海)有限公司 | 业务的冷启动方法、装置及设备 |
CN115328664A (zh) * | 2022-10-11 | 2022-11-11 | 苏州万店掌网络科技有限公司 | 一种消息消费方法、装置、设备及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020120717A1 (en) * | 2000-12-27 | 2002-08-29 | Paul Giotta | Scaleable message system |
CN101303751A (zh) * | 2007-04-30 | 2008-11-12 | 埃森哲全球服务有限公司 | 交替处理的方法、***和计算机程序产品 |
US20100179994A1 (en) * | 2009-01-12 | 2010-07-15 | International Business Machines Corporation | Preserving message order using a message ordering manager |
US20130304886A1 (en) * | 2012-05-14 | 2013-11-14 | International Business Machines Corporation | Load balancing for messaging transport |
CN106648933A (zh) * | 2016-12-26 | 2017-05-10 | 北京奇虎科技有限公司 | 消息队列的消费方法及装置 |
US20180217882A1 (en) * | 2017-01-27 | 2018-08-02 | International Business Machines Corporation | Batch processing of messages |
CN109391646A (zh) * | 2017-08-04 | 2019-02-26 | 中国电信股份有限公司 | 消息中间件消息获取方法、装置和*** |
CN110213371A (zh) * | 2019-05-31 | 2019-09-06 | 深圳前海微众银行股份有限公司 | 消息消费方法、装置、设备及计算机存储介质 |
-
2019
- 2019-11-19 CN CN201911136173.5A patent/CN111078422B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020120717A1 (en) * | 2000-12-27 | 2002-08-29 | Paul Giotta | Scaleable message system |
CN101303751A (zh) * | 2007-04-30 | 2008-11-12 | 埃森哲全球服务有限公司 | 交替处理的方法、***和计算机程序产品 |
US20100179994A1 (en) * | 2009-01-12 | 2010-07-15 | International Business Machines Corporation | Preserving message order using a message ordering manager |
US20130304886A1 (en) * | 2012-05-14 | 2013-11-14 | International Business Machines Corporation | Load balancing for messaging transport |
CN106648933A (zh) * | 2016-12-26 | 2017-05-10 | 北京奇虎科技有限公司 | 消息队列的消费方法及装置 |
US20180217882A1 (en) * | 2017-01-27 | 2018-08-02 | International Business Machines Corporation | Batch processing of messages |
CN109391646A (zh) * | 2017-08-04 | 2019-02-26 | 中国电信股份有限公司 | 消息中间件消息获取方法、装置和*** |
CN110213371A (zh) * | 2019-05-31 | 2019-09-06 | 深圳前海微众银行股份有限公司 | 消息消费方法、装置、设备及计算机存储介质 |
Non-Patent Citations (1)
Title |
---|
一直不懂: "Kafka消费者" * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897662A (zh) * | 2020-07-01 | 2020-11-06 | 中国建设银行股份有限公司 | 偏移量处理方法、装置、电子设备及计算机可读存储介质 |
CN112069438A (zh) * | 2020-09-10 | 2020-12-11 | 北京五八信息技术有限公司 | 消息合并方法、消息处理方法和装置、设备和介质 |
CN112069438B (zh) * | 2020-09-10 | 2023-12-22 | 北京五八信息技术有限公司 | 消息合并方法、消息处理方法和装置、设备和介质 |
CN112954007A (zh) * | 2021-01-26 | 2021-06-11 | 深圳前海微众银行股份有限公司 | 消息传输方法、装置、设备及存储介质 |
CN113297309A (zh) * | 2021-05-31 | 2021-08-24 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN113297309B (zh) * | 2021-05-31 | 2023-11-10 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN115016860A (zh) * | 2022-06-07 | 2022-09-06 | 蚂蚁区块链科技(上海)有限公司 | 业务的冷启动方法、装置及设备 |
CN115328664A (zh) * | 2022-10-11 | 2022-11-11 | 苏州万店掌网络科技有限公司 | 一种消息消费方法、装置、设备及介质 |
CN115328664B (zh) * | 2022-10-11 | 2023-03-24 | 苏州万店掌网络科技有限公司 | 一种消息消费方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111078422B (zh) | 2023-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078422B (zh) | 消息处理方法、消息处理装置、可读存储介质、电子设备 | |
US10453010B2 (en) | Computer device, method, and apparatus for scheduling business flow | |
US8145723B2 (en) | Complex remote update programming idiom accelerator | |
US8082315B2 (en) | Programming idiom accelerator for remote update | |
US8886919B2 (en) | Remote update programming idiom accelerator with allocated processor resources | |
US8607239B2 (en) | Lock mechanism to reduce waiting of threads to access a shared resource by selectively granting access to a thread before an enqueued highest priority thread | |
US8464269B2 (en) | Handling and reporting of object state transitions on a multiprocess architecture | |
CN110740145B (zh) | 消息消费方法、装置、存储介质及电子设备 | |
CN109033814B (zh) | 智能合约触发方法、装置、设备及存储介质 | |
US20120297216A1 (en) | Dynamically selecting active polling or timed waits | |
CN110413384B (zh) | 延时任务处理方法及装置、存储介质、电子设备 | |
US20150378782A1 (en) | Scheduling of tasks on idle processors without context switching | |
CN110659142A (zh) | 消息队列处理方法及装置、电子设备、存储介质 | |
CN112346834A (zh) | 数据库的请求处理方法和装置、电子设备和介质 | |
CN106020984B (zh) | 电子设备中进程的创建方法及装置 | |
CN110851276A (zh) | 一种业务请求处理方法、装置、服务器和存储介质 | |
CN113157426B (zh) | 一种任务调度方法、***、设备及存储介质 | |
CN112445614A (zh) | 一种线程数据的存储管理方法、计算机设备及存储介质 | |
CN111597056A (zh) | 一种分布式调度方法、***、存储介质和设备 | |
CN109766267A (zh) | Cpu高耗代码定位方法、装置、电子设备及存储介质 | |
US10481936B2 (en) | Efficient virtual machine memory monitoring with hyper-threading | |
JPH11353284A (ja) | ジョブ再実行方法 | |
CN111767113A (zh) | 一种用于实现容器驱逐的方法和装置 | |
US20230376339A1 (en) | Methods and apparatus for managing task timeouts within distributed computing networks | |
US20060150193A1 (en) | Signal management in operations with multiple waits |
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 |