CN117827480A - 一种扩展Kafka消费模式的方法及装置 - Google Patents
一种扩展Kafka消费模式的方法及装置 Download PDFInfo
- Publication number
- CN117827480A CN117827480A CN202311700542.5A CN202311700542A CN117827480A CN 117827480 A CN117827480 A CN 117827480A CN 202311700542 A CN202311700542 A CN 202311700542A CN 117827480 A CN117827480 A CN 117827480A
- Authority
- CN
- China
- Prior art keywords
- message
- consumed
- consumption
- ack
- server
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 45
- 238000005192 partition Methods 0.000 claims abstract description 98
- 238000012790 confirmation Methods 0.000 claims abstract description 55
- 238000004590 computer program Methods 0.000 claims description 15
- 230000004044 response Effects 0.000 claims description 12
- 230000005540 biological transmission Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
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
-
- 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/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种扩展Kafka消费模式的方法及装置,方法包括:首先接收Kafka消费组内生成的消息消费请求,然后根据消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息,最后响应于对待消费消息的存储操作,生成待消费消息的唯一消息I D,将唯一消息I D提交给服务端执行ACK消费确认,并将经服务端ACK消费确认后的待消费消息标记为已完成状态,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
Description
技术领域
本发明属于互联网技术领域,特别是一种扩展Kafka消费模式的方法及装置。
背景技术
Kafka是由LinkedIn开发的一个分布式的消息队列系统。Kafka开发的主要目标是构建一个用来处理海量日志用户行为和网站运营统计等的数据处理框架。Kafka集群可以包含一个或多个Kafka服务器,每条发布到Kafka服务器的消息都有一个主题,该主题被称为Topic,一个Kafka服务器可以容纳多个Topic,每个Topic包含一个或多个分区Partition。生产客户端可以向Kafka服务器发送消息,消费客户端可以消费Kafka服务器中的消息。
目前,在业务接入Kafka服务器前需预估生产客户端和消费客户端的吞吐量来决定配置的主题(Topic)的分区数量。消费者组(consumer group)是一个逻辑概念,表示一组消费者共同消费一个或多个主题中的所有分区,每个分区只能由消费者组中的一个消费者消费。对于一个消费者组,当消费者数量小于分区数时,部分消费者将被分配到多个分区;如果消费者数多于分区数,则部分消费者将会处于空闲的状态,可能等待其它消费者关闭或重新平衡。如果单个消费者消费阻塞或者缓慢,可能会导致对应分区消息堆积,如果依靠扩容分区提高吞吐量,相对比较复杂,这成为急需解决的技术问题。
发明内容
本发明的目的是提供一种扩展Kafka消费模式的方法及装置,以解决现有技术中的不足,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
本申请的一个实施例提供了一种扩展Kafka消费模式的方法,所述方法包括:
接收Kafka消费组内生成的消息消费请求;
根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
可选的,所述接收Kafka消费组内生成的消息消费请求之后,所述方法还包括:
接收Kafka消费组内传输的消息消费请求,根据消费者的标识,确定与所述消费者相对应的分区以及根据所述分区确定的所述待消费消息的偏移量。
可选的,所述待消费消息的唯一消息ID根据所述待消费主题、所述分区以及所述待消费消息的偏移量确定。
可选的,所述待消费消息的偏移量通过所述服务端进行存储及更新。
可选的,所述响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态,包括:
将所述待消费消息存储至一个或多个分区对应的消息链表中,获得所述待消费消息的唯一消息ID;
将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作;
响应于将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
可选的,所述将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作之后,所述方法还包括:
若查询到存在超时未确认的ACK消费消息,将所述未确认的ACK消费消息存储到重试主题中,并在接收到下一次拉取待消费消息时从所述重试主题中随机读取。
可选的,所述消费检查点中的消息ACK情况存储于BitSet中。
本申请的又一实施例提供了一种扩展Kafka消费模式的装置,所述装置包括:
接收模块,用于接收Kafka消费组内生成的消息消费请求;
拉取模块,用于根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
确认模块,用于响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
可选的,所述接收模块之后,所述装置还包括:
偏移量确定模块,用于接收Kafka消费组内传输的消息消费请求,根据消费者的标识,确定与所述消费者相对应的分区以及根据所述分区确定的所述待消费消息的偏移量。
可选的,所述确认模块,包括:
获得单元,用于将所述待消费消息存储至一个或多个分区对应的消息链表中,获得所述待消费消息的唯一消息ID;
触发单元,用于将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作;
响应单元,用于响应于将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
可选的,所述触发单元之后,所述装置还包括:
存储单元,用于若查询到存在超时未确认的ACK消费消息,将所述未确认的ACK消费消息存储到重试主题中,并在接收到下一次拉取待消费消息时从所述重试主题中随机读取。
本申请的又一实施例提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时实现上述任一项中所述的方法。
本申请的又一实施例提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以实现上述任一项中所述的方法。
与现有技术相比,本发明首先接收Kafka消费组内生成的消息消费请求,然后根据消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息,最后响应于对待消费消息的存储操作,生成待消费消息的唯一消息ID,将唯一消息ID提交给服务端执行ACK消费确认,并将经服务端ACK消费确认后的待消费消息标记为已完成状态,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
附图说明
图1为本发明实施例提供的一种扩展Kafka消费模式的方法的计算机终端的硬件结构框图;
图2为本发明实施例提供的一种扩展Kafka消费模式的方法的流程示意图;
图3为本发明实施例提供的一种扩展Kafka消费模式的结构示意图;
图4为本发明实施例提供的一种扩展Kafka消费模式的装置的结构示意图。
具体实施方式
下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本发明实施例首先提供了一种扩展Kafka消费模式的方法,该方法可以应用于电子设备,如计算机终端,具体如普通电脑、量子计算机等。
下面以运行在计算机终端上为例对其进行详细说明。图1为本发明实施例提供的一种扩展Kafka消费模式的方法的计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述计算机终端还可以包括用于通信功能的传输装置106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的扩展Kafka消费模式的方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
Kafka是一种高吞吐量的分布式发布订阅消息系统。现在它已被很多公司作为多种类型的数据管道和消息系统使用。为了更好的说明及理解本申请的技术方案,对Kafka的基础概念作如下介绍:
首先,对于Kafka来说,客户端有两种基本类型,包括:生产者(Producer)、消费者(Consumer),生产者(也称为发布者)创建消息,而消费者(也称为订阅者)负责消费消息。
其次,在Kafka中,消息以主题(Topic)来分类,每一个主题都对应一个消息队列或消息链表,即类似于数据库中的表。但是如果把所有同类的消息都塞入到一个“中心”队列(链表)中,势必缺少可伸缩性,无论是生产者/消费者数目的增加,还是消息数量的增加,都可能耗尽系统的性能或存储。对于此问题,可以通过引入分区(Partition)的概念完成水平扩展。
最后,一个Kafka服务器也称为Broker,它接受生产者发送的消息并存入磁盘,Broker同时服务消费者拉取分区消息的请求,返回目前已经提交的消息。使用特定的机器硬件,一个Broker每秒可以处理成千上万的分区和百万量级的消息。若干个Broker组成一个集群(Cluster),其中集群内某个Broker会成为集群控制器(Cluster Controller),它负责管理集群,包括分配分区到Broker、监控Broker故障等。在集群内,一个分区由一个Broker负责,这个Broker也称为这个分区的Leader。当然一个分区可以被复制到多个Broker上来实现冗余,这样当存在Broker故障时可以将其分区重新分配到其他Broker来负责。
参见图2,图2为本发明实施例提供的一种扩展Kafka消费模式的方法的流程示意图,可以包括如下步骤:
S201:接收Kafka消费组内生成的消息消费请求。
具体的,客户端需要获得Kafka集群消费消息时,可以通过发起消息消费请求,该消息消费请求可以包括待消费主题,也即Kafka集群中的Topic。
其中,所述接收Kafka消费组内生成的消息消费请求之后,所述方法还可以包括:
接收Kafka消费组内传输的消息消费请求,根据消费者的标识,确定与所述消费者相对应的分区以及根据所述分区确定的所述待消费消息的偏移量。
消息消费请求对应的数据是以主题Topic为基本单位组织的,不同主题之间是相互独立的。每个主题又可以分为多个不同的分区partition,且分区数量通常在创建主题时预先设定,每个分区存储一部分数据。
客户端从Kafka集群中某个主题Topic对应的消息集合中确认待消费消息时,在Topic中每个分区会记录客户端当前消费的位置,即待消费消息的偏移量(offset)。在客户端的应用程序重启后,会从上一次标记的offset继续消费消息。
需要说明的是,由于目前消息的offset为客户端自动管理,在客户端出现异常时,可能会导致已经提交了offset的消息,实际并没有被处理,从而导致消息丢失。本申请通过由客户端原本的自动或手动提交消费偏移量转变为消费完成通过消息ACK(消息位点提交)接口提交消息ID进行消息确认,即客户端不需要对消费偏移量进行维护,客户端处理完获取到的待消费消息后,携带唯一消息ID向服务端发送消息确认ACK请求,后文将进行详细说明,在此不再叙述。
S202:根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息。
具体的,为提高分区内消息消费请求对应数据的消费速度,本申请采用多对多的关系,即一个分区可以被多个消费者消费,而同一个消费者又可以消费多个分区中的待消费消息。后续消息管理器可以通过获取该消息消费请求,并从相应Topic的分区中拉取待消费的消息。
参见图3,图3为本发明实施例提供的一种扩展Kafka消费模式的结构示意图,图中客户端Kafka消费组包括消费者-0和消费者-1,待消费主题中包括分区-0、分区-1和分区-2,且图中任意分区均可以同时被消费者-0和消费者-1消费。
需要说明的是,客户端Kafka消费组不需要进行分区rebalance,不需要手动assign分区,而通过在服务端处理,可以拉取所有分区的待消费的消息。客户端Kafka消费组消费消息时不需要知道消费偏移量的起始位置,在服务端内根据客户端Kafka消费组分区拉取偏移量的位置拉取消息,实现客户端的无状态的消费。
S203:响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
具体的,所述待消费消息的唯一消息ID根据所述待消费主题、所述分区以及所述待消费消息的偏移量确定。
其中,所述待消费消息的偏移量可以通过所述服务端进行存储及更新。
具体的,所述响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态,可以包括:
1.将所述待消费消息存储至一个或多个分区对应的消息链表中,获得所述待消费消息的唯一消息ID;
示例性的,在消息管理器从Topic的分区中拉取出待消费的消息后,可以将待消费的消息相应存储至与各个分区一一对应的消息链表中。也就是说,消息链表与Topic的分区一一对应,在存储待消费的消息时,可以根据待消费的消息在分区的顺序,将待消费的消息存储至分区对应的消息链表中。
可以理解的是,在每个分区接收到消息时,该消息会被接收的分区分配一个offset,以标识该消息在这个分区中的唯一编号,例如该offset确定了该消息在此分区内的顺序。例如,分区1中包括消息1、消息2、…、消息5,将消息1和消息2从分区1中拉取出来后,可将消息1和消息2按照其offset表征的顺序存储至链表中,如在链表中的存储结果为消息1和消息2。
在一种可选的实施方式中,每个唯一消息ID还可以通过配置文件指定或者也可以由服务端生成,表示此消费者目前所要拉取的待消费消息的Topic+Partitions+offset列表。实际操作中,可以预先设定哪些消费者可以处理哪些分区,并将消费者ID和分区标识(例如编号)存放在Kafka的功能性组件中。
需要说明的是,在各消费者和各分区之间设有唯一消费线程,用以进行信息传输。Kafka消费线程在接收到消费者传输的数据获取请求后,从相应分区中获取偏移量offset;其中,offset存储于消费线程所在设备的内存中,用以表示待消费消息在分区数据文件中的唯一逻辑存储位置。
2.将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作;
3.响应于将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
具体的,消费者拉取待消费消息时,可以从(随机数+分区index)分区数量的分区开始拉取一批待消费消息,服务端为每条待消费消息根据Topic+分区Partition+消息Offset生成唯一消息ID,同时为这批待消费消息添加消费检查点(Check Point),设置消息ACK超时时间,并使用BitSet保存检查点中的消息ACK情况。当拉取消息满足拉取的最小字节数量或拉取等待超时后,返回消息给客户端。消费者消费完成后,提交对应唯一消息ID到服务端进行ACK消费确认请求。
在一种可选的实施方式中,所述将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作之后,所述方法还可以包括:
若查询到存在超时未确认的ACK消费消息,将所述未确认的ACK消费消息存储到重试主题中,并在接收到下一次拉取待消费消息时从所述重试主题中随机读取。
具体的,服务端根据消费检查点(Check Point)中ACK的完成情况执行进一步操作,例如,当全部ACK时,立即更新消费者分区偏移量;若部分ACK且此批待消费消息ACK超时,则将未ACK的消息发送到重试主题中,且重试主题的格式可以为Retry%+原始Topic,然后再更新消费者分区偏移量。消费者再次拉取消息时会随机从重试主题中拉取部分数据。
需要说明的是,通过将未确认的ACK消费消息保存在重试主题中,然后下次拉取消息时随机从重试主题中读取消息,实现对客户端的无感知操作效果。
对于一个消费组维护着分区的两个offset,一个offset为committed Offset,对应消费者偏移量,当服务端宕机恢复之后从该位置继续消费;另一个offset为pulledOffset,对应当前分区该消费组已拉取待消费消息的offset位置。对于多消费者共享分区式的消费,因为有多个消费者同时消费消息,因此消息的确认可能会出现空洞。只有当消费检查点(Check Point)全部ACK或者ACK超时对应的消息发送到重试主题中之后才会移动committed Offset。
其中,消费检查点(Check Point)可以包含以下属性:ACK Timeout用于表示消费ACK超时时间,start Offset用于表示待消费消息的起始offset、ACK BitSet用于记录待消费消息ACK的情况。
可见,本发明首先接收Kafka消费组内生成的消息消费请求,然后根据消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息,最后响应于对待消费消息的存储操作,生成待消费消息的唯一消息ID,将唯一消息ID提交给服务端执行ACK消费确认,并将经服务端ACK消费确认后的待消费消息标记为已完成状态,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
本申请的又一实施例提供了一种扩展Kafka消费模式的装置,如图4所示的一种扩展Kafka消费模式的装置的结构示意图,所述装置包括:
接收模块401,用于接收Kafka消费组内生成的消息消费请求;
拉取模块402,用于根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
确认模块403,用于响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
具体的,所述接收模块之后,所述装置还包括:
偏移量确定模块,用于接收Kafka消费组内传输的消息消费请求,根据消费者的标识,确定与所述消费者相对应的分区以及根据所述分区确定的所述待消费消息的偏移量。
具体的,所述确认模块,包括:
获得单元,用于将所述待消费消息存储至一个或多个分区对应的消息链表中,获得所述待消费消息的唯一消息ID;
触发单元,用于将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作;
响应单元,用于响应于将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
具体的,所述触发单元之后,所述装置还包括:
存储单元,用于若查询到存在超时未确认的ACK消费消息,将所述未确认的ACK消费消息存储到重试主题中,并在接收到下一次拉取待消费消息时从所述重试主题中随机读取。
与现有技术相比,本发明首先接收Kafka消费组内生成的消息消费请求,然后根据消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息,最后响应于对待消费消息的存储操作,生成待消费消息的唯一消息ID,将唯一消息ID提交给服务端执行ACK消费确认,并将经服务端ACK消费确认后的待消费消息标记为已完成状态,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
本发明实施例还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时实现上述任一项方法实施例中的步骤。
具体的,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S201:接收Kafka消费组内生成的消息消费请求;
S202:根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
S203:响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
具体的,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
与现有技术相比,本发明首先接收Kafka消费组内生成的消息消费请求,然后根据消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息,最后响应于对待消费消息的存储操作,生成待消费消息的唯一消息ID,将唯一消息ID提交给服务端执行ACK消费确认,并将经服务端ACK消费确认后的待消费消息标记为已完成状态,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
本发明实施例还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
具体的,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
具体的,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S201:接收Kafka消费组内生成的消息消费请求;
S202:根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
S203:响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
与现有技术相比,本发明首先接收Kafka消费组内生成的消息消费请求,然后根据消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息,最后响应于对待消费消息的存储操作,生成待消费消息的唯一消息ID,将唯一消息ID提交给服务端执行ACK消费确认,并将经服务端ACK消费确认后的待消费消息标记为已完成状态,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例上述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种扩展Kafka消费模式的方法,其特征在于,所述方法包括:
接收Kafka消费组内生成的消息消费请求;
根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
2.根据权利要求1所述的方法,其特征在于,所述接收Kafka消费组内生成的消息消费请求之后,所述方法还包括:
接收Kafka消费组内传输的消息消费请求,根据消费者的标识,确定与所述消费者相对应的分区以及根据所述分区确定的所述待消费消息的偏移量。
3.根据权利要求2所述的方法,其特征在于,所述待消费消息的唯一消息ID根据所述待消费主题、所述分区以及所述待消费消息的偏移量确定。
4.根据权利要求3所述的方法,其特征在于,所述待消费消息的偏移量通过所述服务端进行存储及更新。
5.根据权利要求4所述的方法,其特征在于,所述响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态,包括:
将所述待消费消息存储至一个或多个分区对应的消息链表中,获得所述待消费消息的唯一消息ID;
将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作;
响应于将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
6.根据权利要求5所述的方法,其特征在于,所述将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作之后,所述方法还包括:
若查询到存在超时未确认的ACK消费消息,将所述未确认的ACK消费消息存储到重试主题中,并在接收到下一次拉取待消费消息时从所述重试主题中随机读取。
7.根据权利要求5所述的方法,其特征在于,所述消费检查点中的消息ACK情况存储于BitSet中。
8.一种扩展Kafka消费模式的装置,其特征在于,所述装置包括:
接收模块,用于接收Kafka消费组内生成的消息消费请求;
拉取模块,用于根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
确认模块,用于响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态。
9.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时实现所述权利要求1至7任一项中所述的方法。
10.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以实现所述权利要求1至7任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311700542.5A CN117827480A (zh) | 2023-12-12 | 2023-12-12 | 一种扩展Kafka消费模式的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311700542.5A CN117827480A (zh) | 2023-12-12 | 2023-12-12 | 一种扩展Kafka消费模式的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117827480A true CN117827480A (zh) | 2024-04-05 |
Family
ID=90520006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311700542.5A Pending CN117827480A (zh) | 2023-12-12 | 2023-12-12 | 一种扩展Kafka消费模式的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117827480A (zh) |
-
2023
- 2023-12-12 CN CN202311700542.5A patent/CN117827480A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115004673B (zh) | 消息推送方法、装置、电子设备及计算机可读介质 | |
CN101663651A (zh) | 分布式存储系统 | |
CN111274052A (zh) | 数据分发方法、服务器及计算机可读存储介质 | |
CN109547524B (zh) | 基于物联网的用户行为存储方法、装置、设备及存储介质 | |
CN112417042A (zh) | 一种处理业务请求的方法和装置 | |
CN103164262B (zh) | 一种任务管理方法及装置 | |
CN111400041A (zh) | 服务器配置文件的管理方法、装置及计算机可读存储介质 | |
CN113014618B (zh) | 消息处理方法、系统和电子设备 | |
CN113347238A (zh) | 基于区块链的消息分区方法及系统、设备、存储介质 | |
US20150112929A1 (en) | Parallel Truncation Point Management for Log Based Replication | |
CN117827480A (zh) | 一种扩展Kafka消费模式的方法及装置 | |
CN116540938A (zh) | 数据读取方法、装置、分布式存储系统、设备和存储介质 | |
CN115454666A (zh) | 消息队列集群间的数据同步方法和装置 | |
CN114090687A (zh) | 一种数据同步方法及装置 | |
CN108805741B (zh) | 一种电能质量数据的融合方法、装置及系统 | |
CN114328638A (zh) | 一种基于数据库轮询的业务消息推送系统 | |
CN108011785A (zh) | 一种基于云政务自助终端开机率计算方法 | |
CN114827967A (zh) | 软件更新方法、蓝牙设备及存储介质 | |
CN114500443A (zh) | 消息推送方法、装置、系统、电子设备和存储介质 | |
CN105357222A (zh) | 一种分布式Session管理中间件 | |
CN112235184A (zh) | 一种基于事件驱动的信息推送方法、装置及电子设备 | |
CN112118118B (zh) | 基于反熵算法的指令通知消息广播方法及装置 | |
CN112968933B (zh) | 数据传输方法、装置、服务器及存储介质 | |
CN111143280B (zh) | 一种数据调度方法、系统、装置及存储介质 | |
CN116132533A (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 |