基于Kafka的并发消费方法、装置、设备和介质制造方法及图纸

技术编号:38854165 阅读:21 留言:0更新日期:2023-09-17 10:00
本申请公开了一种基于Kafka的并发消费方法、装置、设备和介质,涉及计算机技术领域。方法包括:响应于检测到拉取处理线程完成消息拉取,根据topic以及topic的分区分组,并将消息发至对应分组的topic的消息队列中;每个topic的消息队列将对应消息发送至对应topic处理线程,并由topic处理线程将对应消息提交给分区线程池并发消费;响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应topic处理线程将当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由commit队列返回至拉取处理线程中。本申请实现Kafka的单线程消费异步处理和多线程并发消费。费。费。

【技术实现步骤摘要】
基于Kafka的并发消费方法、装置、设备和介质


[0001]本申请涉及计算机
,特别是涉及一种基于Kafka的并发消费方法、装置、设备和介质。

技术介绍

[0002]Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
[0003]消息中间件主要用于需要可靠的数据传输的分布式系统,采用消息中间件机制的系统中,不同的对象之间通过传递消息来完成系统间的交互。消息发送者将消息发送给消息服务器,消息服务器将消息存放系统中,在合适的时候将消息转发给接收者。消息中间件能在不同平台之间通信,它常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间同步或异步的协同。
[0004]Kafka生产、存储、消费都是基于流式架构,消息是线性的存储于存储系统中,同时也是线性的发送给消费者。目前消费者拉取一批消息,例如messages0~10条,用户从message0开始按照顺序消费消息,并同步提交消费标识ACK到服务器,当程序重启或异常恢复时,消费都从最后一个ACK开始拉取消息消费,避免消息丢失。
[0005]目前的Kafka客户端具有如下缺点:
[0006]1、消费者是单线程处理,消息的拉取(Poll)、消费处理(Process)、消息位点提交(ACK)全在一个线程中同步处理,处理性能低下;
[0007]2、Kafka的消息需要顺序消费,ACK提交最后一个消费位点,用户想自行实现多线程消费时,ACK的管理会变得非常团难。
[0008]因此,如何实现Kafka的单线程消费异步处理以及多线程并发消费是目前亟待解决的技术问题。

技术实现思路

[0009]为了解决上述
技术介绍
中提到的至少一个问题,本申请提供了一种基于Kafka的并发消费方法、装置、设备和介质,能够实现Kafka的单线程消费异步处理以及多线程并发消费。
[0010]本申请实施例提供的具体技术方案如下:
[0011]第一方面,提供一种基于Kafka的并发消费方法,包括:
[0012]响应于检测到拉取处理线程完成消息拉取,根据topic以及所述topic的分区分组,并将消息发至对应分组的所述topic的消息队列中;
[0013]每个所述topic的消息队列将对应消息发送至对应topic处理线程,并由所述
topic处理线程将所述对应消息提交给分区线程池并发消费;
[0014]响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
[0015]进一步的,所述方法还包括:
[0016]响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
[0017]进一步的,所述方法还包括:
[0018]根据批量提交参数配置生成对应消息提交数量的位数的bitset,所述bitset中按照前后顺序每一状态位用于描述对应顺序的待提交消息的所述消费状态;
[0019]响应于检测到所述待提交消息的消费状态发生变化,更新所述待提交消息对应状态位。
[0020]进一步的,所述状态位包括0和1中至少一种,其中0用于描述所述消费状态为未消费,1用于描述所述消费状态为已消费。
[0021]进一步的,所述响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中,包括:
[0022]响应于检测到任一待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中;
[0023]所述响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中,包括:
[0024]响应于检测到任一待提交消息以及所述待提交消息顺序前的所有消息对应所述bitset中的状态位均为1,对应所述topic处理线程将所述当前待提交消息以及所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
[0025]进一步的,所述方法还包括:
[0026]响应于检测到所述commit队列当前时刻距离上一接收offset时刻超过预设时间阈值,获取所述bitset的状态位信息;
[0027]根据所述bitset的状态位信息生成日志,并将所述日志返回至所述拉取处理线程。
[0028]进一步的,所述批量提交参数配置包括每批消息的消息提交数量、bitset位数以及预设时间阈值中的至少一种。
[0029]第二方面,提供一种基于Kafka的并发消费装置,所述装置包括:
[0030]消息拉取分发模块,用于响应于检测到拉取处理线程完成消息拉取,根据topic以
及所述topic的分区分组,并将消息发至对应分组的所述topic的消息队列中;
[0031]消息处理模块,用于每个所述topic的消息队列将对应消息发送至对应topic处理线程,并由所述topic处理线程将所述对应消息提交给分区线程池并发消费;
[0032]offset提交模块,用于响应于检测到任一待提交消息顺序前的所有消息的消费状态均为已消费,对应所述topic处理线程将所述当前待提交消息顺序前的所有消息对应offset提交到commit队列中,并由所述commit队列返回至所述拉取处理线程中。
[0033]第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述基于Kafka的并发消费方法。
[0034]第四方面,提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述基于Kafka的并发消费方法。
[0035]本申请实施例具有如下有益效果本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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队列返回至所述拉取处理线程中;所述响应于检测到任一待提交消息以及所述待提...

【专利技术属性】
技术研发人员:熊杰
申请(专利权)人:众安在线财产保险股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1