CN116132395A - 消息处理方法、电子设备及计算机可读存储介质 - Google Patents

消息处理方法、电子设备及计算机可读存储介质 Download PDF

Info

Publication number
CN116132395A
CN116132395A CN202211427845.XA CN202211427845A CN116132395A CN 116132395 A CN116132395 A CN 116132395A CN 202211427845 A CN202211427845 A CN 202211427845A CN 116132395 A CN116132395 A CN 116132395A
Authority
CN
China
Prior art keywords
message
partition
consumed
messages
target
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.)
Pending
Application number
CN202211427845.XA
Other languages
English (en)
Inventor
殷渝
郭剑霓
吴海英
郭江
刘磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mashang Xiaofei Finance Co Ltd
Original Assignee
Mashang Xiaofei Finance Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mashang Xiaofei Finance Co Ltd filed Critical Mashang Xiaofei Finance Co Ltd
Priority to CN202211427845.XA priority Critical patent/CN116132395A/zh
Publication of CN116132395A publication Critical patent/CN116132395A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Between Computers (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供了一种消息处理方法、电子设备及计算机可读存储介质,该方法应用于消息生产者节点,包括:向分布式消息系统中的至少一个分区发送多个待消费消息,其中多个待消费消息为针对同一消息主题的消费数据;在检测到多个待消费消息发送完成的情况下,向目标分区发送分区消息结束符,其中,分区消息结束符用于表示向目标分区发送的最后一条消息,目标分区为至少一个分区中的任一个分区,目标分区与分区消息结束符一一对应;在检测到订阅消息主题的消息消费者节点从目标分区中获取到分区消息结束符的情况下,则确定消息消费者节点完成对目标分区内的待消费消息的消费。本申请的技术方案能够准确的检测消费者针对目标分区的消费进度。

Description

消息处理方法、电子设备及计算机可读存储介质
技术领域
本申请涉及计算机技术领域,具体涉及一种消息处理方法、电子设备及计算机可读存储介质。
背景技术
Kafka是一种高吞吐量的分布式发布订阅消息系统。生产者(也称“发布者”)向Kafka中创建的针对消息主题(Topic)的分区(Partition)发送消息,而消费者(也称“订阅者”)从分区中获取需要消费的消息。但由于针对同一消息主题通常会在Kafka中设置多个分区,进而导致了生产者无法准确的判断消费者对多个分区中的某个分区的消息进度,即无法判断某个分区内的消息是否被消费者消费完毕。
鉴于此,如何准确的获取消费者对某个分区的消费进度成为亟待解决的技术问题。
发明内容
有鉴于此,本申请实施例提供了一种消息处理方法、电子设备及计算机可读存储介质,能够准确的获取消费者对目标分区的消费进度。
第一方面,本申请的实施例提供了一种消息处理方法,应用于消息生产者节点,包括:向分布式消息系统中的至少一个分区发送多个待消费消息,其中多个待消费消息为针对同一消息主题的消费数据;在检测到多个待消费消息发送完成的情况下,向目标分区发送分区消息结束符,其中,分区消息结束符用于表示向目标分区发送的最后一条消息,目标分区为至少一个分区中的任一个分区,目标分区与分区消息结束符一一对应;在检测到订阅消息主题的消息消费者节点从目标分区中获取到分区消息结束符的情况下,则确定消息消费者节点完成对目标分区内的待消费消息的消费。
第二方面,本申请的实施例提供了一种消息处理方法,应用于消息消费者节点,包括:从分布式消息系统中的目标分区获取多个消息,多个消息包括待消费消息和分区消息结束符,其中待消费消息为针对同一消息主题的消费数据,分区消息结束符用于表示向目标分区发送的最后一条消息,目标分区为分布式消息系统包括的至少一个分区中的任一个分区;若获取到的消息包括分区消息结束符,则向数据库发送分区消息结束符或用于表示分区消息结束符的第一消息。
第三方面,本申请的实施例提供了一种消息处理方法,包括消息生产者节点向分布式消息系统中的至少一个分区发送多个待消费消息以及至少一个分区消息结束符,其中多个待消费消息为针对同一消息主题的消费数据,分区消息结束符用于表示向目标分区发送的最后一个消息,目标分区为至少一个分区中的任一个分区,目标分区与分区结束符一一对应;消息消费者节点从目标分区获取多个消息,多个消息包括待消费消息以及分区消息结束符;若消息消费者节点获取到的消息包括分区消息结束符,则向数据库发送分区消息结束符或用于表示分区消息结束符的第一消息。
第四方面,本申请的实施例提供了一种计算可读存储介质,存储介质存储有计算机程序,计算机程序用于执行上述第一方面至第三方面所述的消息处理方法。
第六方面,本申请的实施例提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器,其中,处理器用于执行上述第一方面至第三方面所述的消息处理方法。
本申请实施例提供了一种消息处理方法、电子设备及计算机可读存储介质,通过向分布式消息系统中的目标分区发送分区消息结束符,并在检测到消息消费者节点从目标分区获取到分区消息结束符的情况下,确定消息消费者节点对目标分区内的消息消费完毕,使得本申请实施例无需记录每条消息消费者节点已消费的消息,降低了因频繁读写存储单元(例如数据库)而导致的系统风险,并且通过分区消息结束符确定消息消费者节点对目标分区是否消费完毕,在实现了对目标分区消费进度检测的同时,提高了判断目标分区消费进度的准确性。
附图说明
附图用来提供对本公开的进一步理解,并且构成说明书的一部分,与本公开的实施例一起用于解释本公开,并不构成对本公开的限制。通过参考附图对详细示例实施例进行描述,以上和其他特征和优点对本领域技术人员将变得更加显而易见,在附图中:
图1是本申请一示例性实施例提供的消息处理系统的结构示意图。
图2是本申请一示例性实施例提供的消息处理方法的流程示意图。
图3是本申请另一示例性实施例提供的消息处理方法的流程示意图。
图4是本申请又一示例性实施例提供的消息处理方法的流程示意图。
图5是本申请再一示例性实施例提供的消息处理方法的流程示意图。
图6是本申请再一示例性实施例提供的消息处理方法的流程示意图。
图7是本申请一示例性实施例提供的消息处理装置的结构示意图。
图8是本申请一示例性实施例提供的用于消息处理的电子设备的框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
支付系统在执行批量扣款操作的情况下,为节约跑批(即支付系统自动扣款结账)的时间,通常会利用Kafka异步处理多个与跑批相关的数据,例如采用一个消息生产者节点,十个消息消费者节点的形式。上游的消息生产者节点向Kafka中的至少一个分区发送针对同一消息主题的消息,而后下游的消息消费者节点在Kafka中的至少一个分区内获取该消息,并将该消息按照预设的规则进行清洗过滤之后存入数据库。由于只有在消息主题内的消息全部消费完成之后,才能读取数据库清洗过滤后的多个消息,将该多个消息重新合并生成数据集成文件上传文件传输协议服务器(FTP服务器),并推送给支付系统进行扣款,因此对消息主题消费进度的检测尤为重要。然而消息主题内通常包括多个分区,且每个分区包括多条待消费消息,可见若要对消息主题的消费进度进行准确的检测,首先需要准确的检测每个分区的消费进度。
目前通常会在数据库创建一张用于记录消费条数的数据表,在消息消费者节点每消费完一条消息时,更新累计消费的条数,例如在原来的基础上执行加一操作。然后消息生产者节点可以通过将累计消费的条数与累计发送的条数进行对比,并在数量相等或者在一个误差范围内的情况下,结束轮询判定消息主题内的消息已经被消费者消费完毕。
但在上述方法中,由于消息消费者节点每消费一条消息就需要更新数据库中的数据表,以更新累计消费的条数,因此若消费出现异常,就有可能导致更新累计消费的条数失败,从而导致计数器结果不准确。并且即使将累计消费的条数与累计发送的条数进行对比,也无法准确的判断消息主题中某个分区的消费情况。
此外,在跑批业务场景下,待消费消息的数据量通常在百万级别以上,多个消费者同时更新数据并发量大,容易造成数据库行锁竞争加剧,从而导致数据库性能下降,跑批时间大大增加。
针对上述问题,本申请实施例提供了一种消息处理方法,下面将参考附图来具体介绍本申请的各种非限制性实施例。
图1是本申请一示例性实施例提供的消息处理系统的结构示意图。该系统包括消息生产者节点110、分布式消息系统120、数据库130和消息消费者节点141。消息消费者节点的数量可以是一个或多个,例如消息消费者节点还可以包括消息消费者节点142和消息消费者节点143。
消息生产者节点110可以与分布式消息系统120和数据库130通讯连接。消息生产者节点110可以向分布式消息系统中发布多个消息(也称“待消费消息”),并且消息生产者节点110也可以查询数据库130中记录的数据。消息生产者节点110可以是通信端点,例如可以是消息生产者的终端设备,本申请实施例对消息生产者节点不作具体限定。
分布式消息系统120可以是Kafka系统,本申请实施例对分布式消息系统不作具体限定。在分布式消息系统中可以创建多个消息主题,针对每个消息主题可以在分布式消息系统中设置至少一个分区,其中该分区可以理解为是存储数据的单元,例如存储消息生产者节点110发送的多个消息。分区的数量可以在创建消息主题时,根据实际情况进行设定,本申请对此不作具体限定。例如,在针对同一消息主题的消息较多的情况下,可以将分区的数量设置为80;在针对同一消息主题的消息数据较少的情况下,可以将分区的数量设置为10。
数据库130可以预先存储用于记录数据的数据库表格,例如用于存储分区消息结束符的记录表格。
消息消费者节点141可以与分布式消息系统120和数据库130通讯连接。消息消费者节点141可以从分布式消息系统120中订阅针对消息主题的多个消息,并且在获取到分区消息结束符对应的消息时,向数据库130发送记录该分区消息结束符的消息。消息消费者节点141可以是消费者的终端设备,例如可以是消费者的手机或电脑,本申请实施例对此不作具体限定。
图2是本申请一示例性实施例提供的消息处理方法的流程示意图。图2的方法由消息生产者节点(例如,消息生产者的计算设备)来执行。如图2所示,该消息处理方法包括如下内容。
S210:向分布式消息系统中的至少一个分区发送多个待消费消息。
在一实施例中,多个待消费消息为针对同一消息主题的消费消息。
具体地,在分布式消息系统中可以创建消息主题,该消息主题可以认为是一个消息集合,例如该消息主题可以是支付业务相关的消息集合。并且针对创建的消息主题,在分布式消息系统中可以设置至少一个分区,例如设置80、100或120个分区。消息生产者节点可以将同一消息主题的多个待消费消息发送至分布式消息系统中的至少一个分区内。例如,根据Kafka中预先设置的分区规则,将多个待消费消息均匀或非均匀的分布在不同的分区中。其中待消费消息可以根据业务场景的需要灵活设置,例如可以是在支付业务场景下的账务文件数据。
在一实施例中,消息生产者节点获取针对同一消息主题的多个待消费数据,进而对多个待消费数据进行解析并封装为待消费消息。在每解析预定数量的待消费消息时,将该预定数量的待消费消息的集合,批量发送至Kafka,其中预定数量可以是200或300等,本申请实施例对预定数量不作具体限定。需要说明的是,Kafka是由Java语言编写的,因此待消费数据可以被封装为Kafka可解析的待消费消息,例如Parse Object对象。
进一步地,基于Kafka中预先设置的分区规则,将该预定数量的待消费消息分配至Kafka中的至少一个分区内。需要说明的是,将预定数量的待消费消息批量发送至Kafka的过程可以理解为是向Kafka循环发送待消费消息的过程,并且在多个待消费消息发送完毕的情况下,停止向Kafka发送待消费消息。
在一实施例中,多个待消费消息可以作为跑批业务场景下的一个批次的数据,其中一个批次可以代表一次跑批,由于跑批操作会在每日夜间进行,因此为便于检测不同批次的执行进度,不同的批次可以利用批次号进行区分,其中该批次号可以对应设置为时间戳、唯一的字符串或唯一识别码(Universally Unique Identifier,UUID)等。
S220:在检测到多个待消费消息发送完成的情况下,向目标分区发送分区消息结束符。
在一实施例中,分区消息结束符用于表示向目标分区发送的最后一条消息,目标分区为至少一个分区中的任一个分区,目标分区与分区消息结束符一一对应。
具体地,在检测到多个待消费消息全部发送完毕的情况下,消息生产者节点向至少一个分区中的目标分区发送分区消息结束符,相当于消息生产者节点分别向至少一个分区中的每个分区发送一条分区消息结束符,即一个分区包括一个分区消息结束符。例如,在分区数量为120的情况下,消息生产者节点需要向消息主题的120个分区发送120个分区消息结束符。
分区消息结束符可以是用于表示多个待消费消息发送完成的数据,其可以作为目标分区(或任一分区)的最后一条消息。分区消息结束符可以包括批次号和分区索引,其中批次号可以理解为是跑批业务场景下的批次号,分区索引用于表示该分区消息结束符当前所在的分区位置(例如当前在第几个分区)。需要说明的是,由于分区消息结束符是在多个待消费消息发送完毕的情况下发送的,因此分区消息结束符可以理解为是多个待消费消息之外的消息。
在一实施例中,消息生产者节点可以将分区消息结束符进行封装,获取封装后的分区消息结束符,以便于分布式消息系统解析该封装后的分区消息结束符。然后将该封装后的分区消息结束符发送至目标分区。
S230:在检测到订阅消息主题的消息消费者节点从目标分区中获取到分区消息结束符的情况下,则确定消息消费者节点完成对目标分区内的待消费消息的消费。
具体地,消息生产者节点将分区消息结束符发送至目标分区后,可以检测消息消费者节点是否获取到分区消息结束符,以确定消息消费者节点对目标分区的消费进度。其中消息生产者节点在检测到消息消费者节点从目标分区获取到分区消息结束符的情况下,可以判定消息消费者节点对该目标分区内的待消费消息消费完毕,否则判定消息消费者节点未完成消费。
订阅消息主题的消息消费者节点的数量可以是一个,也可以是多个,本申请实施例对此不作具体限定。需要说明的是,在消息消费者节点的数量为多个的情况下,不同的消息消费者节点可以订阅同一消息主题下不同分区内的待消费信息。也就是说,针对消息主题的至少一个分区中包括的多个待消费消息(即全部的消息)可以由多个消息消费者节点共同订阅,以完成对该消息主题的消费。还需要说明的是,在消息消费者节点的数量为多个的情况下,多个消息消费者节点并行消费消息。
例如,在针对消息主题的5个分区共25条消息的情况下,消息消费者节点1可以订阅分区1和分区2中的10条消息,消息消费者节点2可以订阅分区3中的5条消息,消息消费者节点3可以订阅分区4和分区5中的10条消息。
需要说明的是,消息生产者节点、分布式消息系统、数据库和多个消息消费者节点之间是通过发送消息的方式进行通讯的。
还需要说明的是,由于Kafka会保证每个分区的消息是有序的,并且每个分区内的待消费消息是顺序消费这个特性,因此使用分区消息结束符检测消息主题中所有分区内的待消费消息是否消费完成的方案,相较于消费者每消费一条消息,就更新数据库的记录而言,能够减少对数据库资源的占用。
由此可知,本申请实施例通过向分布式消息系统中的目标分区发送分区消息结束符,并在检测到消息消费者节点从目标分区获取到分区消息结束符的情况下,确定消息消费者节点对目标分区内的消息消费完毕,使得本申请实施例无需记录每条消息消费者节点已消费的消息,降低了因频繁读写存储单元(例如数据库)而导致的系统风险,并且通过分区消息结束符确定消息消费者节点对目标分区是否消费完毕,在实现了对目标分区消费进度检测的同时,提高了判断目标分区消费进度的准确性。
在本申请一实施例中,该方法还包括:在检测到数据库中的记录表格记录的分区消息结束符的数量与目标分区的数量相同的情况下,则确定消息消费者节点对多个待消费消息消费完毕。
具体地,数据库中可以预先存储运维人员创建的用于存储分区消息结束符的记录表格,该记录表格的字段可以包括批次号和分区索引两个字段。
在一实施例中,在消息生产者节点检测到记录表格中记录的分区消息结束符的数量与目标分区的数量相同的情况下,则确定消息消费者节点对分布式消息系统中的至少一个分区内针对同一消息主题的多个待消费消息消费完毕。其中由于目标分区为至少一个分区中的任一个分区,因此目标分区的数量可以理解为是至少一个分区的数量。也就是说,在消息生产者节点检测到记录表格中记录的分区消息结束符的数量与至少一个分区的数量相同的情况下,则确定消息消费者节点对分布式消息系统中的至少一个分区内针对同一消息主题的待消费消息消费完毕。
例如,在至少一个分区的数量为120的情况下,消息生产者节点在检测到分区消息结束符的数量为120时,则确定订阅该消息主题的一个或多个消息消费者节点已消费完毕。
需要说明的是,在跑批场景下多个待消费消息通常为百万级别,目前采用记录每条消费者已消费的消息确定消费进度,需要频繁读写数据库,并且每次更新数据库之前都要先获取该数据库行锁,从而导致了并行处理变成了串行处理,增加了跑批的时间,进而达不到使用Kafka异步并行处理以降低跑批时间的目的。
由此可知,本申请实施例通过设置用于记录分区消息结束符的记录表格,只对消息消费者节点消费到的分区消息结束符进行记录,能够减少对数据库资源的占用,降低因频繁更新数据库带来的系统性风险,同时也降低了读写数据库的次数,从而降低了在跑批业务场景下的跑批时间。
图3是本申请另一示例性实施例提供的消息处理方法的流程示意图。图3实施例是对图2实施例中步骤S220的进一步限定。如图3所示,该步骤S220进一步还包括如下内容。
S310:将分区消息结束符进行封装,获取封装后的分区消息结束符,以使分布式消息系统解析封装后的分区消息结束符。
具体地,消息生产者节点可以将分区消息结束符封装为分布式消息系统可以解析的消息,即封装后的分区消息结束符为一个消息。例如,由于Kafka是由Java语言编写的,因此消息生产者节点可以将分区消息结束符封装为Kafka可以解析的结束增量记录(EndIncrement Record)对象。
S320:将封装后的分区消息结束符发送至目标分区。
具体地,消息生产者节点可以将封装后的分区消息结束符发送至分布式消息系统中的目标分区,并作为该目标分区的最后一条消息。
由此可知,本申请实施例通过将分区消息结束符封装为Kafka可以解析消息,为Kafka解析该分区消息结束符提供了保障。
图4是本申请又一示例性实施例提供的消息处理方法的流程示意图。图4的方法由消息消费者节点(例如,消费者的计算设备)来执行。如图4所示,该消息处理方法包括如下内容。
需要说明的是,图4实施例与上述实施例相同的部分不再赘述,此处着重描述不同之处。
S410:从分布式消息系统中的目标分区获取多个消息,多个消息包括待消费消息和分区消息结束符。
在一实施例中,待消费消息为针对同一消息主题的消费数据,分区消息结束符用于表示向目标分区发送的最后一条消息,目标分区为分布式消息系统包括的至少一个分区中的任一个分区。
具体地,消息消费者节点对分布式消息系统中指定的消息主题进行消息订阅后,消息消费者节点可以从分布式消息系统中的目标分区获取多个消息。需要说明的是,由于分布式消息系统(例如Kafka)中每个分区内的消息是顺序消费的,因此消息消费者节点在对目标分区内的消息进行消费时,是逐个获取该目标分区内的多个消费。
消息消费者节点获取的多个消息包括消息消费者节点可以正常消费的待消费消息和作为该目标分区最后一条消息的分区消息结束符。
S420:若获取到的消息包括分区消息结束符,则向数据库发送分区消息结束符或用于表示分区消息结束符的第一消息。
具体地,消息消费者节点从分布式消息系统获取到消息后,首先可以判定该消息的类型,该类型可以包括用于正常消费的待消费消息以及分区消息结束符对应的消息。消息消费者节点在检测到获取的消息包括分区消息结束符的情况下,可以向数据库发送分区消息结束符或第一消息,以便于数据库将分区消息结束符的批次号和分区索引记录在记录表格中。
第一消息可以是用于指示分区消息结束符已被消息消费者节点消费的消息,即不包括分区消息结束符的消息,也就是不包括分区索引和批次号的消息,本申请实施例对第一消息的形式不作具体限定。例如,第一消息可以包括消息消费者节点消费该分区消息结束符的时间等信息,或具有用于更新记录标识的信息,其中该标识可以理解为是数据库在检测到该标识时,会自动更新记录的分区消息结束符的条数。需要说明的是,数据库在接收到第一消息时,可以采用累计的方式统计消息消费者节点消费到分区消息结束符的条数,并且在累计的条数与分区的数量相同的情况下,消息生产节点可以确定订阅该消息主题的消息消费者节点消费完成。
由此可知,本申请实施例通过对获取的消息进行类型检测,并在消息包括分区消息结束符的情况下,向数据库发送记录该分区消结束符的消息,为消息生产者节点可以及时、准确的获取消费者对目标分区的消费进度提供了保障。
在本申请一实施例中,向数据库发送分区消息结束符或用于表示分区消息结束符的第一消息之前,还包括:对分区消息结束符进行封装,得到封装后的分区消息结束符,以便数据库解析封装后的分区消息结束符;或对第一消息进行封装,得到封装后的第一消息,以便数据库解析封装后的第一消息。
具体地,消息消费者节点可以将分区消息结束符或第一消息封装为数据库可以解析的消息。例如,数据库是由SQL(Structured Query Language,结构查询语言)语言编写的,此时消息消费者节点可以将分区消息结束符或第一消息封装为SQL语言可以解析的消息。
由此可知,本申请实施例通过将分区消息结束符封装为数据库可以解析消息,为数据库记录分区消息结束符提供了保障。
图5是本申请再一示例性实施例提供的消息处理方法的流程示意图。如图5所示,该消息处理方法包括如下内容。
S510:消息生产者节点向分布式消息系统中的至少一个分区发送多个待消费消息以及至少一个分区消息结束符。
在一实施例中,多个待消费消息为针对同一消息主题的消费数据,分区消息结束符用于表示向目标分区发送的最后一个消息,目标分区为至少一个分区中的任一个分区,目标分区与分区结束符一一对应。
S520:消息消费者节点从目标分区获取多个消息,多个消息包括待消费消息以及分区消息结束符。
S530:若消息消费者节点获取到的消息包括分区消息结束符,则向数据库发送分区消息结束符或用于表示分区消息结束符的第一消息。
需要说明的是,上述实施例的具体实现方式可以参考上述图2至图4实施例提供的消息处理方法中的描述,为了避免重复,在此不再赘述。
由此可知,本申请实施例通过向分布式消息系统中的目标分区发送分区消息结束符,并在检测到消息消费者节点从目标分区获取到分区消息结束符的情况下,确定消息消费者节点对目标分区内的消息消费完毕,使得本申请实施例无需记录每条消息消费者节点已消费的消息,降低了因频繁读写存储单元(例如数据库)而导致的系统风险,并且通过分区消息结束符确定消息消费者节点对目标分区是否消费完毕,在实现了对目标分区消费进度检测的同时,提高了判断目标分区消费进度的准确性。
在本申请一实施例中,多个待消费消息为预设批次的消费数据,分区消息结束符包括预设批次的批次号和分区索引,分区索引用于指示与分区消息结束符对应的目标分区,其中,方法还包括:数据库预先存储记录表格,其中记录表格用于在接收到消息消费者节点发送的分区消息结束符的情况下记录批次号和分区索引。
在本申请一实施例中,向数据库发送分区消息结束符或用于表示分区消息结束符的第一消息之前,还包括:对分区消息结束符进行封装,得到封装后的分区消息结束符,以便数据库解析封装后的分区消息结束符;或对第一消息进行封装,得到封装后的第一消息,以便数据库解析封装后的第一消息。
图6是本申请再一示例性实施例提供的消息处理方法的流程示意图。
在消息生产者节点601这一端可以执行如下内容。
S610:开始。
S615:解析多个待消费数据。具体地,将多个待消费数据封装为多个待消费消息。
S620:判断是否读取到200条待消费消息。
其中在读取到200条待消费消息后,执行步骤S625,否则重复执行步骤S615。S625:批量发送Kafka。例如,将每200条待消费消息封装为待消费消息集合,并将该待消费消息集合发送至Kafka602。
S630:判断是否将多个待消费消息全部发送。
其中在将多个待消费消息全部发送完毕的情况下,执行步骤S635,否则重复执行S625。S635:向Kafka的至少一个分区中的每个分区发送分区消息结束符。例如,向Kafka602中的至少一个分区内的每个分区发送End Increment Record对象。
S640:判断分区消息结束符是否发送完成。
其中在分区消息结束符发送完成的情况下,执行步骤S645,否则循环执行步骤S635。
S645:查询分区消息结束符的条数。
例如,消息生产者节点统计数据库603中记录的分区消息结束符的数量。
S650:判断数据库中分区消息结束符的数量是否等于分区的数量。
其中在分区消息结束符的条数与分区的数量相等的情况下,执行步骤S655,否则执行步骤S645,直至分区消息结束符的条数与分区的数量相同。
S655:在分区消息结束符的数量等于分区的数量时,确定消费者全部消费完成,结束。
在消息消费者节点604这一端可以执行如下内容。
S660:开始。
S665:开始消费。
例如,订阅Kafka中的待消费消息。
S670:判断消息的类型。
其中在消息为待消费消息的情况下,执行步骤S675;在消息包括分区消息结束符的情况下执行步骤S680。
S675:正常消费。
S680:判断为分区内最后一条消息,并向数据库发送记录该分区消息结束符的消息。
S685:结束。
图7是本申请一示例性实施例提供的消息处理装置的结构示意图。如图7所示,该消息处理装置700包括:第一发送模块710、第二发送模块720和确定模块730。
第一发送模块710用于向分布式消息系统中的至少一个分区发送多个待消费消息,其中多个待消费消息为针对同一消息主题的消费数据;第二发送模块720用于在检测到多个待消费消息发送完成的情况下,向目标分区发送分区消息结束符,其中,分区消息结束符用于表示向目标分区发送的最后一条消息,目标分区为至少一个分区中的任一个分区,目标分区与分区消息结束符一一对应;确定模块730用于在检测到订阅消息主题的消息消费者节点从目标分区中获取到分区消息结束符的情况下,则确定消息消费者节点完成对目标分区内的待消费消息的消费。
本申请实施例提供了一种消息处理装置,通过向分布式消息系统中的目标分区发送分区消息结束符,并在检测到消息消费者节点从目标分区获取到分区消息结束符的情况下,确定消息消费者节点对目标分区内的消息消费完毕,使得本申请实施例无需记录每条消息消费者节点已消费的消息,降低了因频繁读写存储单元(例如数据库)而导致的系统风险,并且通过分区消息结束符确定消息消费者节点对目标分区是否消费完毕,在实现了对目标分区消费进度检测的同时,提高了判断目标分区消费进度的准确性。
根据本申请一实施例,确定模块730还用于在检测到数据库中的记录表格记录的分区消息结束符的数量与目标分区的数量相同的情况下,则确定消息消费者节点对多个待消费消息消费完毕。
根据本申请一实施例,第二发送模块620用于将分区消息结束符进行封装,获取封装后的分区消息结束符,以使分布式消息系统解析封装后的分区消息结束符;将封装后的分区消息结束符发送至目标分区。
应当理解,上述实施例中的第一发送模块710、第二发送模块720和确定模块730的具体工作过程和功能可以参考上述图2至图6实施例提供的消息处理方法中的描述,为了避免重复,在此不再赘述。
图8是本申请一示例性实施例提供的用于消息处理的电子设备的框图。
参照图8,电子设备800包括处理组件810,其进一步包括一个或多个处理器,以及由存储器820所代表的存储器资源,用于存储可由处理组件810的执行的指令,例如应用程序。存储器820中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件810被配置为执行指令,以执行上述消息处理方法。
电子设备800还可以包括一个电源组件被配置为执行电子设备800的电源管理,一个有线或无线网络接口被配置为将电子设备800连接到网络,和一个输入输出(I/O)接口。可以基于存储在存储器820的操作系统操作电子设备800,例如Windows ServerTM,Mac OSXTM,UnixTM,LinuxTM,FreeBSDTM或类似。
一种非临时性计算机可读存储介质,当存储介质中的指令由上述电子设备800的处理器执行时,使得上述电子设备800能够执行一种消息处理方法,包括:向分布式消息系统中的至少一个分区发送多个待消费消息,其中多个待消费消息为针对同一消息主题的消费数据;在检测到多个待消费消息发送完成的情况下,向目标分区发送分区消息结束符,其中,分区消息结束符用于表示向目标分区发送的最后一条消息,目标分区为至少一个分区中的任一个分区,目标分区与分区消息结束符一一对应;在检测到订阅消息主题的消息消费者节点从目标分区中获取到分区消息结束符的情况下,则确定消息消费者节点完成对目标分区内的待消费消息的消费。
上述所有可选技术方案,可采用任意结合形成本申请的可选实施例,在此不再一一赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序校验码的介质。
需要说明的是,在本申请的描述中,术语“第一”、“第二”、“第三”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种消息处理方法,其特征在于,应用于消息生产者节点,包括:
向分布式消息系统中的至少一个分区发送多个待消费消息,其中所述多个待消费消息为针对同一消息主题的消费数据;
在检测到所述多个待消费消息发送完成的情况下,向目标分区发送分区消息结束符,其中,所述分区消息结束符用于表示向所述目标分区发送的最后一条消息,所述目标分区为所述至少一个分区中的任一个分区,所述目标分区与所述分区消息结束符一一对应;
在检测到订阅所述消息主题的消息消费者节点从所述目标分区中获取到所述分区消息结束符的情况下,则确定所述消息消费者节点完成对所述目标分区内的待消费消息的消费。
2.根据权利要求1所述的消息处理方法,其特征在于,所述方法还包括:
在检测到数据库中的记录表格记录的分区消息结束符的数量与目标分区的数量相同的情况下,则确定所述消息消费者节点对所述多个待消费消息消费完毕。
3.根据权利要求1所述的消息处理方法,其特征在于,所述向目标分区发送分区消息结束符,包括:
将所述分区消息结束符进行封装,获取封装后的分区消息结束符,以使所述分布式消息系统解析所述封装后的分区消息结束符;
将所述封装后的分区消息结束符发送至所述目标分区。
4.一种消息处理方法,其特征在于,应用于消息消费者节点,包括:
从分布式消息系统中的目标分区获取多个消息,所述多个消息包括待消费消息和分区消息结束符,其中所述待消费消息为针对同一消息主题的消费数据,所述分区消息结束符用于表示向所述目标分区发送的最后一条消息,所述目标分区为所述分布式消息系统包括的至少一个分区中的任一个分区;
若获取到的消息包括所述分区消息结束符,则向数据库发送所述分区消息结束符或用于表示所述分区消息结束符的第一消息。
5.根据权利要求4所述的消息处理方法,其特征在于,所述向数据库发送所述分区消息结束符或用于表示所述分区消息结束符的第一消息之前,还包括:
对所述分区消息结束符进行封装,得到封装后的分区消息结束符,以便所述数据库解析所述封装后的分区消息结束符;
或对所述第一消息进行封装,得到封装后的第一消息,以便所述数据库解析所述封装后的第一消息。
6.一种消息处理方法,其特征在于,包括:
消息生产者节点向分布式消息系统中的至少一个分区发送多个待消费消息以及至少一个分区消息结束符,其中所述多个待消费消息为针对同一消息主题的消费数据,分区消息结束符用于表示向目标分区发送的最后一个消息,所述目标分区为所述至少一个分区中的任一个分区,所述目标分区与所述分区结束符一一对应;
消息消费者节点从所述目标分区获取多个消息,所述多个消息包括待消费消息以及分区消息结束符;
若所述消息消费者节点获取到的消息包括所述分区消息结束符,则向数据库发送所述分区消息结束符或用于表示所述分区消息结束符的第一消息。
7.根据权利要求6所述的消息处理方法,其特征在于,所述多个待消费消息为预设批次的消费数据,所述分区消息结束符包括所述预设批次的批次号和分区索引,所述分区索引用于指示与所述分区消息结束符对应的所述目标分区,
其中,所述方法还包括:
所述数据库预先存储记录表格,其中所述记录表格用于在接收到所述消息消费者节点发送的分区消息结束符的情况下记录所述批次号和所述分区索引。
8.根据权利要求6所述的消息处理方法,其特征在于,所述向数据库发送所述分区消息结束符或用于表示所述分区消息结束符的第一消息之前,还包括:
对所述分区消息结束符进行封装,得到封装后的分区消息结束符,以便所述数据库解析所述封装后的分区消息结束符;
或对所述第一消息进行封装,得到封装后的第一消息,以便所述数据库解析所述封装后的第一消息。
9.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1至8任一项所述的消息处理方法。
10.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器,
其中,所述处理器用于执行上述权利要求1至8任一项所述的消息处理方法。
CN202211427845.XA 2022-11-15 2022-11-15 消息处理方法、电子设备及计算机可读存储介质 Pending CN116132395A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211427845.XA CN116132395A (zh) 2022-11-15 2022-11-15 消息处理方法、电子设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211427845.XA CN116132395A (zh) 2022-11-15 2022-11-15 消息处理方法、电子设备及计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN116132395A true CN116132395A (zh) 2023-05-16

Family

ID=86305289

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211427845.XA Pending CN116132395A (zh) 2022-11-15 2022-11-15 消息处理方法、电子设备及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN116132395A (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190104179A1 (en) * 2017-10-01 2019-04-04 Oracle International Corporation System and method for topics implementation in a distributed data computing environment
CN110648178A (zh) * 2019-09-24 2020-01-03 四川长虹电器股份有限公司 一种增加kafka消费能力的方法
CN110912949A (zh) * 2018-09-14 2020-03-24 北京京东尚科信息技术有限公司 位点提交方法和装置
CN111163118A (zh) * 2018-11-07 2020-05-15 株式会社日立制作所 一种Kafka集群中的消息传输方法及装置
CN111600774A (zh) * 2020-05-13 2020-08-28 北京奇艺世纪科技有限公司 消费延迟确定方法、系统、装置、设备及可读存储介质
CN111818112A (zh) * 2019-04-11 2020-10-23 中国移动通信集团四川有限公司 一种基于Kafka系统的发送消息的方法和装置
CN113641515A (zh) * 2021-08-02 2021-11-12 北京达佳互联信息技术有限公司 一种消息处理方法、装置、系统、电子设备和存储介质
CN114363407A (zh) * 2021-12-24 2022-04-15 上海软素科技有限公司 消息服务方法及装置、可读存储介质及电子设备
CN114493720A (zh) * 2022-02-14 2022-05-13 中国建设银行股份有限公司 监控Kafka消费者的方法、装置、存储介质及设备
CN115242787A (zh) * 2022-07-22 2022-10-25 恒生电子股份有限公司 消息处理系统及方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190104179A1 (en) * 2017-10-01 2019-04-04 Oracle International Corporation System and method for topics implementation in a distributed data computing environment
CN110912949A (zh) * 2018-09-14 2020-03-24 北京京东尚科信息技术有限公司 位点提交方法和装置
CN111163118A (zh) * 2018-11-07 2020-05-15 株式会社日立制作所 一种Kafka集群中的消息传输方法及装置
CN111818112A (zh) * 2019-04-11 2020-10-23 中国移动通信集团四川有限公司 一种基于Kafka系统的发送消息的方法和装置
CN110648178A (zh) * 2019-09-24 2020-01-03 四川长虹电器股份有限公司 一种增加kafka消费能力的方法
CN111600774A (zh) * 2020-05-13 2020-08-28 北京奇艺世纪科技有限公司 消费延迟确定方法、系统、装置、设备及可读存储介质
CN113641515A (zh) * 2021-08-02 2021-11-12 北京达佳互联信息技术有限公司 一种消息处理方法、装置、系统、电子设备和存储介质
CN114363407A (zh) * 2021-12-24 2022-04-15 上海软素科技有限公司 消息服务方法及装置、可读存储介质及电子设备
CN114493720A (zh) * 2022-02-14 2022-05-13 中国建设银行股份有限公司 监控Kafka消费者的方法、装置、存储介质及设备
CN115242787A (zh) * 2022-07-22 2022-10-25 恒生电子股份有限公司 消息处理系统及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
肖宁: "面向NFV的运维系统的设计与实现", 《中国知网硕士电子期刊》, no. 7, 15 July 2023 (2023-07-15) *

Similar Documents

Publication Publication Date Title
CN108156006B (zh) 一种埋点数据上报方法、装置及电子设备
CN111381987A (zh) 一种消息处理方法、装置、电子设备及介质
CN108958959B (zh) 检测hive数据表的方法和装置
CN109788026B (zh) 消息处理方法及装置
CN111061758B (zh) 数据存储方法、装置及存储介质
CN112115200B (zh) 数据同步方法、装置、电子设备及可读存储介质
CN107688626B (zh) 慢查询日志处理方法、装置及电子设备
CN110633977A (zh) 支付异常处理方法、装置及终端设备
CN112667426A (zh) 日志分析方法及装置
CN112463254A (zh) 网页加载时长的获取方法、装置、设备及存储介质
CN111784318A (zh) 数据处理方法、装置、电子设备及存储介质
CN111258819A (zh) MySQL数据库备份文件的数据获取方法、装置和系统
CN112437148B (zh) 业务请求的处理方法、装置、业务服务器及系统
CN114401065A (zh) 一种本地时间校准方法、装置、设备及存储介质
CN116132395A (zh) 消息处理方法、电子设备及计算机可读存储介质
CN111309693A (zh) 一种数据同步方法、装置、系统、电子设备及存储介质
CN114417200B (zh) 网络数据的采集方法、装置及电子设备
CN111367691A (zh) 数据反馈方法及装置、电子设备和可存储介质
CN113472881B (zh) 在线终端设备的统计方法和装置
CN112988776B (zh) 文本解析规则的更新方法、装置、设备及可读存储介质
CN111291127B (zh) 一种数据同步方法、装置、服务器及存储介质
CN114896082A (zh) 消息处理方法、装置、电子设备和存储介质
CN114385267B (zh) 一种用于出款交易业务的数据推送方法
CN111625605A (zh) 信息同步方法和装置、以及存储介质和电子设备
CN110875951B (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