CN116760899A - 基于Kafka的并发消费方法、装置、设备和介质 - Google Patents
基于Kafka的并发消费方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN116760899A CN116760899A CN202310690263.9A CN202310690263A CN116760899A CN 116760899 A CN116760899 A CN 116760899A CN 202310690263 A CN202310690263 A CN 202310690263A CN 116760899 A CN116760899 A CN 116760899A
- Authority
- CN
- China
- Prior art keywords
- message
- submitted
- topic
- consumption
- processing thread
- 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 52
- 238000005192 partition Methods 0.000 claims abstract description 27
- 238000001514 detection method Methods 0.000 claims abstract description 14
- 230000015654 memory Effects 0.000 claims description 26
- 238000003860 storage Methods 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 230000005291 magnetic effect Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 230000005294 ferromagnetic effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- ZLIBICFPKPWGIZ-UHFFFAOYSA-N pyrimethanil Chemical compound CC1=CC(C)=NC(NC=2C=CC=CC=2)=N1 ZLIBICFPKPWGIZ-UHFFFAOYSA-N 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
Classifications
-
- 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/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/566—Grouping or aggregating service requests, e.g. for unified processing
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种基于Kafka的并发消费方法、装置、设备和介质,涉及计算机技术领域。方法包括:响应于检测到拉取处理线程完成消息拉取,根据topic以及topic的分区分组,并将消息发至对应分组的topic的消息队列中;每个topic的消息队列将对应消息发送至对应topic处理线程,并由topic处理线程将对应消息提交给分区线程池并发消费;响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应topic处理线程将当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由commit队列返回至拉取处理线程中。本申请实现Kafka的单线程消费异步处理和多线程并发消费。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种基于Kafka的并发消费方法、装置、设备和介质。
背景技术
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
消息中间件主要用于需要可靠的数据传输的分布式系统,采用消息中间件机制的系统中,不同的对象之间通过传递消息来完成系统间的交互。消息发送者将消息发送给消息服务器,消息服务器将消息存放系统中,在合适的时候将消息转发给接收者。消息中间件能在不同平台之间通信,它常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间同步或异步的协同。
Kafka生产、存储、消费都是基于流式架构,消息是线性的存储于存储系统中,同时也是线性的发送给消费者。目前消费者拉取一批消息,例如messages0~10条,用户从message0开始按照顺序消费消息,并同步提交消费标识ACK到服务器,当程序重启或异常恢复时,消费都从最后一个ACK开始拉取消息消费,避免消息丢失。
目前的Kafka客户端具有如下缺点:
1、消费者是单线程处理,消息的拉取(Poll)、消费处理(Process)、消息位点提交(ACK)全在一个线程中同步处理,处理性能低下;
2、Kafka的消息需要顺序消费,ACK提交最后一个消费位点,用户想自行实现多线程消费时,ACK的管理会变得非常团难。
因此,如何实现Kafka的单线程消费异步处理以及多线程并发消费是目前亟待解决的技术问题。
发明内容
为了解决上述背景技术中提到的至少一个问题,本申请提供了一种基于Kafka的并发消费方法、装置、设备和介质,能够实现Kafka的单线程消费异步处理以及多线程并发消费。
本申请实施例提供的具体技术方案如下:
第一方面,提供一种基于Kafka的并发消费方法,包括:
响应于检测到拉取处理线程完成消息拉取,根据topic以及所述topic的分区分组,并将消息发至对应分组的所述topic的消息队列中;
每个所述topic的消息队列将对应消息发送至对应topic处理线程,并由所述topic处理线程将所述对应消息提交给分区线程池并发消费;
响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
进一步的,所述方法还包括:
响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
进一步的,所述方法还包括:
根据批量提交参数配置生成对应消息提交数量的位数的bitset,所述bitset中按照前后顺序每一状态位用于描述对应顺序的待提交消息的所述消费状态;
响应于检测到所述待提交消息的消费状态发生变化,更新所述待提交消息对应状态位。
进一步的,所述状态位包括0和1中至少一种,其中0用于描述所述消费状态为未消费,1用于描述所述消费状态为已消费。
进一步的,所述响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中,包括:
响应于检测到任一待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中;
所述响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中,包括:
响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
进一步的,所述方法还包括:
响应于检测到所述commit队列当前时刻距离上一接收offset时刻超过预设时间阈值,获取所述bitset的状态位信息;
根据所述bitset的状态位信息生成日志,并将所述日志返回至所述拉取处理线程。
进一步的,所述批量提交参数配置包括每批消息的消息提交数量、bitset位数以及预设时间阈值中的至少一种。
第二方面,提供一种基于Kafka的并发消费装置,所述装置包括:
消息拉取分发模块,用于响应于检测到拉取处理线程完成消息拉取,根据topic以及所述topic的分区分组,并将消息发至对应分组的所述topic的消息队列中;
消息处理模块,用于每个所述topic的消息队列将对应消息发送至对应topic处理线程,并由所述topic处理线程将所述对应消息提交给分区线程池并发消费;
offset提交模块,用于响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述基于Kafka的并发消费方法。
第四方面,提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述基于Kafka的并发消费方法。
本申请实施例具有如下有益效果:
本申请实施例提供的一种基于Kafka的并发消费方法、装置、设备和介质,能够实现poll线程与process线程的隔离,实现poll线程和process线程的解耦,实现分区消费异步化,提高了并发度;同时,通过topic的消息队列将对应消息发送至对应topic处理线程,并由topic处理线程topic_processor将对应消息提交给分区线程池partition_poll并发消费,通过检测当前待提交消息顺序前的所有消息的消费状态均为已消费才能执行offset提交,以避免未消费的消息丢失,能够继续提高并发度,增加消费性能,实现多线程并发消费。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本申请实施例提供的基于Kafka的并发消费方法的总流程图;
图2示出根据本申请一个实施例的基于Kafka的并发消费方法的具体流程图;
图3示出根据本申请一个实施例的基于Kafka的并发消费方法的框架图;
图4示出根据本申请一个实施例的messages队列消费状态示意图;
图5示出根据本申请一个实施例的对应图4的bieset状态位示意图;
图6示出本申请实施例提供的基于Kafka的并发消费装置的结构示意图;
图7示出可被用于实施本申请中所述的各个实施例的示例性系统。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,在本申请的描述中,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
需要注意的是,术语“S1”、“S2”等仅用于步骤的描述目的,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅仅是为了方便描述本申请的方法,而不能理解为指示步骤的先后顺序。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
实施例一
本申请提供了一种基于Kafka的并发消费方法,参照图1,包括:
S1、响应于检测到拉取处理线程完成消息拉取,根据topic以及topic的分区分组,并将消息发至对应分组的topic的消息队列中;
S2、每个topic的消息队列将对应消息发送至对应topic处理线程,并由topic处理线程将对应消息提交给分区线程池并发消费;
S3、响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应topic处理线程将当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由commit队列返回至拉取处理线程中。
具体的,参照图2,Kafka客户端原先消息拉取(Poll)、消费处理(Process)以及消息位点提交(ACK)都在一个线程同步处理,导致处理性能低下。首先要实现消息拉取与消费处理的解耦,即poll线程与process线程的解耦。示例性的,参照图3,拉取处理线程poll_processor负责处理同一集群的一个或多个topic的poll和commit操作。首先通过拉取处理线程poll_processor拉取消息将消息poll至本地,然后根据topic以及topic的分区partition分组,发往对应各topic的queue中(例如to pic1_message_queue/topic2_message_queue等),每个topic的消息队列可以直接将消息提交给分区线程池并发消费,也可以由topic处理线程将对应消息提交给分区线程池并发消费。在对应分区线程池partition_po ll中启动partition个数线程顺序消费各自partition的消息,然后批量提交offset到commit_queue中,最终返回至拉取处理线程poll_process or中,并由拉取处理线程poll_processor批量提交。当topic的消息队列直接将消息提交给分区线程池并发消费时,此时已经实现poll线程与process线程的隔离了,即已经实现poll线程和process线程的解耦,实现分区消费异步化,提高了并发度。而通过topic的消息队列将对应消息发送至对应topic处理线程,并由topic处理线程topic_processor将对应消息提交给分区线程池partition_poll并发消费,能够继续提高并发度,增加消费性能,实现多线程并发消费。
在一些实施方式中,方法还包括:
S4、响应于检测到任一待提交消息以及待提交消息顺序前的所有消息的消费状态均为已消费,对应topic处理线程将当前待提交消息以及当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由commit队列返回至拉取处理线程中。
示例性的,参照图4,message0、message1、message2、message4以及message8已处理完成,message3、message5、message6、message7以及message9还未处理完成,由于kafka的offset的顺序提交机制以及线程池处理消息是乱序的,就会产生有些排在后面的消息已消费,而中间部分消息还未消费的情况。这时,如果将后面已经消费的消息提交,则未消费的其他消息则会丢失。例如,若提交message8,则未消费的message3、message5、message6以及message7就可能会丢失。若以message3为当前待提交消息,此时message3为未消费的,则message3不能提交,但检测到当前待提交消息顺序前的所有消息(message0、message1以及message2)的消费状态均为已消费,则此时message0、message1以及message2是可以提交的(即未包括当前待提交消息);同样的,若以message2为当前待提交消息,此时message2为已消费的,且同时,当前待提交消息顺序前的所有消息(message0以及message1)的消费状态均为已消费,则此时message0、message1以及message2是可以提交的(即包括当前待提交消息)。另外,若以message4为当前待提交消息,由于此时message3未消费,因此,还是仅message0、message1以及message2是可以提交的,此时可以执行提交message0、message1以及message2或是不执行提交等待message3消费完毕更新状态后执行message0、message1、message2、message3以及message4的提交。特别的,具体提交配置可以在用户批量提交参数配置batchcommit参数中进行配置,可以配置一个提交队列中(例如上述message0~message9)均消费完毕后提交,也可以配置一个提交队列中按照前后顺序前N个(N≥1)消费完毕后提交,可以根据用户适用场景灵活配置满足业务需求。
在一些实施方式中,方法还包括:
101、根据批量提交参数配置生成对应消息提交数量的位数的bitset,bitset中按照前后顺序每一状态位用于描述对应顺序的待提交消息的消费状态;
102、响应于检测到待提交消息的消费状态发生变化,更新待提交消息对应状态位。
具体的,可以采用滑动窗口控制消息的提交,具体的实现方式是在消费启动后,实例化一个topic配置的max.poll.records长度的bitset用于映射消息的offset能否提交状态,即对应消息的消费状态。需要注意的是,批量提交参数配置batchcommit中配置了每批的消息提交数量(例如图4中message0~message9,一共为10个),可以根据实际业务场景以及业务性能配置例如10个、30个、50个以及100个等等。当待提交消息的消费状态发生变化,会更新待提交消息对应状态位以描述当前对应待提交消息的准确消费状态。例如,若当前待提交消息的消费状态为未消费,则对应bitset中对应的状态位描述此时为“未消费”;若当前待提交消息的消费状态发生变更,变更为已消费,则,bitset对应的状态位也更新,描述此时对应的待提交消息的消费状态为“已消费”。然后在topic处理线程topic_processor中检查bitset中的连续状态位以确认是否具备能够发起一次提交的条件。
在一些实施方式中,所述状态位包括0和1中至少一种,其中0用于描述所述消费状态为未消费,1用于描述所述消费状态为已消费。
在一些实施方式中,基于此,S3包括:
响应于检测到任一待提交消息顺序前的所有消息对应bitset中的状态位均为1,对应topic处理线程将当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由commit队列返回至拉取处理线程中;
S4包括:
响应于检测到任一待提交消息以及待提交消息顺序前的所有消息对应bitset中的状态位均为1,对应topic处理线程将当前待提交消息以及当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由commit队列返回至拉取处理线程中。
示例性的,参照图5,message0、message1、message2、message4以及message8已消费,则对应的bitset中的状态位为1;message3、message5、message6、message7以及message9还未消费,则对应的bitset中的状态位为0。若以message3为当前待提交消息,message3当前对应状态位为0,则此时message3为未消费的,则message3不能提交;但检测到当前待提交消息顺序前的所有消息(message0、message1以及message2)对应的bitset状态位为1,即消费状态均为已消费,则此时message0、message1以及message2是可以提交的;若此时message3消费状态更新为已消费,则变更bitset中的状态位,即变更为“1111100010”,然后通过topic处理线程topic_processor中检查bitset中的连续状态位,发现对应message0、message1、message2、message3以及message4均可以提交,此时可以根据批量提交参数配置batchcommit决定是否提交。一般的,以每次等待当前offset提交队列内消息均消费完毕为例,即对应bitset中状态位均为1,即此时bitset中为“1111111111”,此时对该批消息offset提交至commit队列中。然后对bitset状态位进行初始化,例如变更为“0000000000”,然后再在根据新的一批待提交消息的消费状态,同步变更状态位等待满足提交条件。需要注意的是,以上说明仅为示例,实际亦可在批量提交参数配置中灵活配置,满足bitset中前N个(N≥1)状态位均为1即执行提交。
在一些实施方式中,方法还包括:
响应于检测到commit队列当前时刻距离上一接收offset时刻超过预设时间阈值,获取bitset的状态位信息;
根据bitset的状态位信息生成日志,并将日志返回至拉取处理线程。
具体的,批量提交参数配置包括每批消息的消息提交数量、bitset位数以及预设时间阈值中的至少一种。在批量提交参数配置中可以同时配置每批消息的消息提交数量对应的bitset位数以及每批提交时间间隔、预设时间阈值等等参数。当topic处理线程topic_processor检测到commit队列当前时刻距离上一接收offset时刻超过预设时间阈值,则表明此时该批次待提交消息中某一个或多个位点可能存在问题,需要生成错误信息,此时获取bitset的状态位信息,并依据bitset的状态位信息生成日志,能够描述当前批次中哪些待提交消息(即对应bitset状态位仍为0的)可能存在问题,标识这些待提交信息以及提供提交等待时间等错误信息,返回给拉取处理线程poll_processor,以返回给用户执行告警,提醒用户或者相关操作人员进行维护。
在本实施例中,能够实现poll线程与process线程的隔离,实现poll线程和process线程的解耦,实现分区消费异步化,提高了并发度;同时,通过topic的消息队列将对应消息发送至对应topic处理线程,并由topic处理线程topic_processor将对应消息提交给分区线程池partition_poll并发消费,通过检测当前待提交消息顺序前的所有消息的消费状态均为已消费才能执行offset提交,以避免未消费的消息丢失,能够继续提高并发度,增加消费性能,实现多线程并发消费。
实施例二
对应上述实施例,本申请还提供了一种基于Kafka的并发消费装置,参照图6,装置包括:消息拉取分发模块、消息处理模块以及offset提交模块。
其中,所述消息拉取分发模块用于响应于检测到拉取处理线程完成消息拉取,根据topic以及所述topic的分区分组,并将消息发至对应分组的所述topic的消息队列中;所述消息处理模块用于每个所述topic的消息队列将对应消息发送至对应topic处理线程,并由所述topic处理线程将所述对应消息提交给分区线程池并发消费;所述offset提交模块用于响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
进一步的,所述offset提交模块还用于响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
进一步的,所述offset提交模块还用于根据批量提交参数配置生成对应消息提交数量的位数的bitset,所述bitset中按照前后顺序每一状态位用于描述对应顺序的待提交消息的所述消费状态;以及用于响应于检测到所述待提交消息的消费状态发生变化,更新所述待提交消息对应状态位。
进一步的,所述状态位包括0和1中至少一种,其中0用于描述所述消费状态为未消费,1用于描述所述消费状态为已消费。
进一步的,所述offset提交模块还用于响应于检测到任一待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中;以及用于响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
进一步的,所述offset提交模块还用于响应于检测到所述commit队列当前时刻距离上一接收offset时刻超过预设时间阈值,获取所述bitset的状态位信息;以及用于根据所述bitset的状态位信息生成日志,并将所述日志返回至所述拉取处理线程。
进一步的,所述批量提交参数配置包括每批消息的消息提交数量、bitset位数以及预设时间阈值中的至少一种。
关于基于Kafka的并发消费装置的具体限定可以参见上文中对于基于Kafka的并发消费方法实施例的相关限定,故此处不作限定。上述基于Kafka的并发消费装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
实施例三
对应上述实施例,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时可以实现上述基于Kafka的并发消费方法。
如图7所示,在一些实施例中,系统能够作为各所述实施例中的任意一个用于基于Kafka的并发消费方法的上述电子设备。在一些实施例中,系统可包括具有指令的一个或多个计算机可读介质(例如,系统存储器或NVM/存储设备)以及与该一个或多个计算机可读介质耦合并被配置为执行指令以实现模块从而执行本申请中所述的动作的一个或多个处理器(例如,(一个或多个)处理器)。
对于一个实施例,系统控制模块可包括任意适当的接口控制器,以向(一个或多个)处理器中的至少一个和/或与系统控制模块通信的任意适当的设备或组件提供任意适当的接口。
系统控制模块可包括存储器控制器模块,以向系统存储器提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
系统存储器可被用于例如为系统加载和存储数据和/或指令。对于一个实施例,系统存储器可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,系统存储器可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,系统控制模块可包括一个或多个输入/输出(I/O)控制器,以向NVM/存储设备及(一个或多个)通信接口提供接口。
例如,NVM/存储设备可被用于存储数据和/或指令。NVM/存储设备可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备可包括在物理上作为系统被安装在其上的设备的一部分的存储资源,或者其可被该设备访问而不必作为该设备的一部分。例如,NVM/存储设备可通过网络经由(一个或多个)通信接口进行访问。
(一个或多个)通信接口可为系统提供接口以通过一个或多个网络和/或与任意其他适当的设备通信。系统可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信。
对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器中的至少一个可与系统控制模块的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,系统可以但不限于是:服务器、工作站、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)。在各个实施例中,系统可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,系统包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。本领域技术人员应能理解,计算机程序指令在计算机可读介质中的存在形式包括但不限于源文件、可执行文件、安装包文件等,相应地,计算机程序指令被计算机执行的方式包括但不限于:该计算机直接执行该指令,或者该计算机编译该指令后再执行对应的编译后程序,或者该计算机读取并执行该指令,或者该计算机读取并安装该指令后再执行对应的安装后程序。在此,计算机可读介质可以是可供计算机访问的任意可用的计算机可读存储介质或通信介质。
通信介质包括藉此包含例如计算机可读指令、数据结构、程序模块或其他数据的通信信号被从一个系统传送到另一系统的介质。通信介质可包括有导的传输介质(诸如电缆和线(例如,光纤、同轴等))和能传播能量波的无线(未有导的传输)介质,诸如声音、电磁、RF、微波和红外。计算机可读指令、数据结构、程序模块或其他数据可被体现为例如无线介质(诸如载波或诸如被体现为扩展频谱技术的一部分的类似机制)中的已调制数据信号。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被更改或设定的信号。调制可以是模拟的、数字的或混合调制技术。
在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
实施例四
对应上述实施例,本申请还提供了一种计算机可读存储介质,存储有计算机可执行指令,计算机可执行指令用于执行基于Kafka的并发消费方法。
在本实施例中,计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动的介质。例如,计算机可读存储介质包括,但不限于,易失性存储器,诸如随机存储器(RAM,DRAM,SRAM);以及非易失性存储器,诸如闪存、各种只读存储器(ROM,PROM,EPROM,EEPROM)、磁性和铁磁/铁电存储器(MRAM,FeRAM);以及磁性和光学存储设备(硬盘、磁带、CD、DVD);或其它现在已知的介质或今后开发的能够存储供计算机系统使用的计算机可读信息/数据。
尽管已描述了本申请实施例中的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例中范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种基于Kafka的并发消费方法,其特征在于,包括:
响应于检测到拉取处理线程完成消息拉取,根据topic以及所述topic的分区分组,并将消息发至对应分组的所述topic的消息队列中;
每个所述topic的消息队列将对应消息发送至对应topic处理线程,并由所述topic处理线程将所述对应消息提交给分区线程池并发消费;
响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
2.根据权利要求1所述的基于Kafka的并发消费方法,其特征在于,所述方法还包括:
响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
3.根据权利要求1或2所述的基于Kafka的并发消费方法,其特征在于,所述方法还包括:
根据批量提交参数配置生成对应消息提交数量的位数的bitset,所述bitset中按照前后顺序每一状态位用于描述对应顺序的待提交消息的所述消费状态;
响应于检测到所述待提交消息的消费状态发生变化,更新所述待提交消息对应状态位。
4.根据权利要求3所述的基于Kafka的并发消费方法,其特征在于,所述状态位包括0和1中至少一种,其中0用于描述所述消费状态为未消费,1用于描述所述消费状态为已消费。
5.根据权利要求4所述的基于Kafka的并发消费方法,其特征在于,所述响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中,包括:
响应于检测到任一待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中;
所述响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中,包括:
响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
6.根据权利要求3所述的基于Kafka的并发消费方法,其特征在于,所述方法还包括:
响应于检测到所述commit队列当前时刻距离上一接收offset时刻超过预设时间阈值,获取所述bitset的状态位信息;
根据所述bitset的状态位信息生成日志,并将所述日志返回至所述拉取处理线程。
7.根据权利要求6所述的基于Kafka的并发消费方法,其特征在于,所述批量提交参数配置包括每批消息的消息提交数量、bitset位数以及预设时间阈值中的至少一种。
8.一种基于Kafka的并发消费装置,其特征在于,所述装置包括:
消息拉取分发模块,用于响应于检测到拉取处理线程完成消息拉取,根据topic以及所述topic的分区分组,并将消息发至对应分组的所述topic的消息队列中;
消息处理模块,用于每个所述topic的消息队列将对应消息发送至对应topic处理线程,并由所述topic处理线程将所述对应消息提交给分区线程池并发消费;
offset提交模块,用于响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任意一项所述基于Kafka的并发消费方法。
10.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于执行权利要求1至7中任意一项所述基于Kafka的并发消费方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310690263.9A CN116760899A (zh) | 2023-06-12 | 2023-06-12 | 基于Kafka的并发消费方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310690263.9A CN116760899A (zh) | 2023-06-12 | 2023-06-12 | 基于Kafka的并发消费方法、装置、设备和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116760899A true CN116760899A (zh) | 2023-09-15 |
Family
ID=87949018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310690263.9A Pending CN116760899A (zh) | 2023-06-12 | 2023-06-12 | 基于Kafka的并发消费方法、装置、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116760899A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117931484A (zh) * | 2024-03-22 | 2024-04-26 | 中国人民解放军国防科技大学 | 基于滑动窗口的消息消费方法、装置、设备及存储介质 |
-
2023
- 2023-06-12 CN CN202310690263.9A patent/CN116760899A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117931484A (zh) * | 2024-03-22 | 2024-04-26 | 中国人民解放军国防科技大学 | 基于滑动窗口的消息消费方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106649766B (zh) | 一种基于kafka的消息处理方法 | |
JP5042454B2 (ja) | 受信コンピューティングシステムのための方法とコンピュータプログラム、およびコンピューティングシステム | |
US11144330B2 (en) | Algorithm program loading method and related apparatus | |
US9507652B2 (en) | Synchronizing communication over shared memory | |
WO2021259013A1 (zh) | 数据处理方法、装置、电子设备及计算机可读介质 | |
US11157315B2 (en) | Method for process management and electronic device | |
CN112650599A (zh) | 一种日志处理方法、设备及存储介质 | |
CN110321189B (zh) | 一种在宿主程序中呈现寄宿程序的方法与设备 | |
CN116760899A (zh) | 基于Kafka的并发消费方法、装置、设备和介质 | |
CN112231073A (zh) | 一种分布式任务调度方法及其装置 | |
CN107509160B (zh) | 数据发送方法、电子设备和存储介质 | |
CN113806165A (zh) | 一种服务器远程监控方法、系统和设备 | |
CN115640149A (zh) | Rdma事件管理方法、设备及存储介质 | |
EP3896931B1 (en) | Spark shuffle-based remote direct memory access system and method | |
CN114584618A (zh) | 信息交互方法、装置、设备、存储介质和系统 | |
US10379918B2 (en) | System and method for MPI implementation in an embedded operating system | |
CN116225702A (zh) | 一种异构加速任务处理系统、方法、设备及存储介质 | |
WO2019061619A1 (zh) | 一种避免线程阻塞的方法、装置及计算机设备 | |
CN113986460A (zh) | 一种数据同步方法、装置、设备和存储介质 | |
CN115454666A (zh) | 消息队列集群间的数据同步方法和装置 | |
CN114595080A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN115079806A (zh) | 一种边缘服务器定时休眠控制方法、装置、设备和介质 | |
US9342134B2 (en) | Power consumption reduction in a computing device | |
CN115250276A (zh) | 分布式系统及数据处理的方法和装置 | |
CN112272213A (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 |