System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种kafka代理客户端及使用其的消息队列延迟方法技术_技高网

一种kafka代理客户端及使用其的消息队列延迟方法技术

技术编号:40910654 阅读:2 留言:0更新日期:2024-04-18 14:39
本发明专利技术公开了一种kafka代理客户端及使用其的消息队列延迟方法,其客户端包括消息发送端、kafka服务端和消息消费端;kafka服务端包括多个消息主题,每个消息主题均设有主分区和多个延时区,主分区用于存储第一次延时时间,延时区用于依次存储除了第一次延时时间以外的剩余的延时时间,以形成分区延时时间戳表;消息发送端用于向kafka服务端发送待消费信息,消息消费端用于接收接收来自kafka服务端的消费信息并根据分区延时时间戳表来消费消费信息。其方法使用kafka代理客户端。所述kafka代理客户端及使用其的消息队列延迟方法解决了现有技术中不能满足同一消息不能拥有多个延迟时间的问题。

【技术实现步骤摘要】

本专利技术涉及数字信息处理,特别涉及一种kafka代理客户端及使用其的消息队列延迟方法


技术介绍

1、kafka是一种高吞吐量的分布式发布订阅消息系统。kafka服务端每个消息主题下会有多个分区(具体多少个分区由用户设置,默认为一个分区),每个分区都会形成一个消息先进先出的队列。如图1所示,消息发送端在发布消息时,会将每个消息随机发布到kafka服务端的消息主题下的某个分区上。如图2所示,消息消费端必须在一个消费组下,一个消费组下会有多个消费节点,每个消费节点针对某一消息主题,会固定消费由kafka服务端分配的该消息主题下的某几个分区。

2、可以看出,kafka本身并没有消息廷迟消费的能力。目前业内,也仅能作到简单的消息廷迟消费,一般的方案是对同一消息主题在消息消费端统一廷迟某个时间,因为同一个消息主题下所有分区的消息都是先进先出,所以先进来的消息就一定先出,如图3所示,如果某个分区下当前所取的消息还未到消费时间,则对该分区的当前消息不消费且暂停取消息到下一个消费时间点,且这种方式只能满要延迟固定时间的需求。当用户的需求是:对于同一消息,每次消费时延迟的时间不一样,即有多重延迟时间,比如第一次消费时延迟10秒,第二次消费时延迟20秒,第三次消费时30秒…,则该方案就难以满足用户的要求。


技术实现思路

1、为了克服现有技术存在的缺陷,本专利技术的一个目的在于提供一种kafka代理客户端,以解决上述的问题。

2、为了克服现有技术存在的缺陷,本专利技术的另一个目的在于提供一种消息队列延迟方法,以解决上述的问题。

3、本专利技术解决其技术问题所采用的技术方案是:一种kafka代理客户端,包括消息发送端、kafka服务端和消息消费端,所述消息发送端与所述kafka服务端通信连接,所述消息消费端与所述kafka服务端通信连接;

4、所述kafka服务端包括多个消息主题,每个消息主题均设有主分区和多个延时区,所述主分区用于存储第一次延时时间,所述延时区用于依次存储除了第一次延时时间以外的剩余的延时时间,以形成分区延时时间戳表;

5、所述消息发送端用于向kafka服务端发送待消费信息,所述消息消费端用于接收接收来自kafka服务端的消费信息并根据分区延时时间戳表来消费所述消费信息。

6、值得说明的是,所述kafka代理客户端预设定有注释@mqtopic(value="x",consumdelaysecond={y}),以形成消息主题和延时时间,其中x为消息主题,{y}为所有延时时间组成的数组,以使延时时间存储到kafka服务端中对应的消息主题中的主分区或延时区中。

7、具体地,所述主分区包括多个分区,所述主分区存储有数组{y}中的第一种延时时间,每个延时区均为一个分区,数组{y}中除了第一种延时时间外的剩余种类的延时时间按数组{y}内的元素的排列顺序依次存储于所述延时区,且每个延时区只存储一种延时时间。

8、优选的,所述待消费信息包括信息体,所述信息体包括retrytime、createtime和donetime,其中retrytime用于设置消息消费的重新消费次数,createtime用于存储消息的创建时间,donetime用于存储单次消息处理完时的完成时间。

9、值得说明的是,一种消息队列延迟方法,使用所述的kafka代理客户端,包括以下步骤:

10、s1:根据延时时间以及延时时间存储在消息主题内的位置形成延时时间的排位表[a,b],其中a为延时时间,b为延时时间存储的位置,以及得到分区和廷时时间戳的关系表;

11、s2:消息消费端根据消息消费的重新消费次数retrytime,调用排位表以及关系表延时消费该消息主题的待消费信息。

12、可选的,在所述步骤s2中,先取通过consumdelaysecond[retrytime]得到下一次的延时时间,再根据排位表以及关系表得到该延时时间所存储的位置和分区,最后消息发送端将待消费的信息发送到该分区上以供消息消费端消费。

13、具体地,所述的分区和廷时时间戳的关系表中的分区根据消息主题所占的总分区数和主分区所占的区域数得到,其中所述主分区所占的区域数通过所述消费发送端计算,所述主分区所占的区域数等于所述消息主题所占的总分区数减去所述延时时间的种类数再加1。

14、可选的,当所述主分区所占的区域数为负值时,将所述主分区所占的区域数设置成1。

15、本专利技术的有益效果在于:在所述kafka代理客户端中,通过设置主分区和多个延时区,来存储不同的延时时间,在需要延时时,通过消息消费端调用即可实现同一消息,不同时间消费时能拥有不同的延时时间的目的。

本文档来自技高网...

【技术保护点】

1.一种kafka代理客户端,其特征在于:包括消息发送端、kafka服务端和消息消费端,所述消息发送端与所述kafka服务端通信连接,所述消息消费端与所述kafka服务端通信连接;

2.根据权利要求1所述的一种kafka代理客户端,其特征在于:所述kafka代理客户端预设定有注释@MqTopic(value="X",consumDelaySecond={Y}),以形成消息主题和延时时间,其中X为消息主题,{Y}为所有延时时间组成的数组,以使延时时间存储到kafka服务端中对应的消息主题中的主分区或延时区中。

3.根据权利要求2所述的一种kafka代理客户端,其特征在于:所述主分区包括多个分区,所述主分区存储有数组{Y}中的第一种延时时间,每个延时区均为一个分区,数组{Y}中除了第一种延时时间外的剩余种类的延时时间按数组{Y}内的元素的排列顺序依次存储于所述延时区,且每个延时区只存储一种延时时间。

4.根据权利要求3所述的一种kafka代理客户端,其特征在于:所述待消费信息包括信息体,所述信息体包括retryTime、createTime和doneTime,其中retryTime用于设置消息消费的重新消费次数,createTime用于存储消息的创建时间,doneTime用于存储单次消息处理完时的完成时间。

5.一种消息队列延迟方法,其特征在于:使用权利要求4所述的kafka代理客户端,包括以下步骤:

6.根据权利要求5所述的一种消息队列延迟方法,其特征在于:在所述步骤S2中,先取通过consumDelaySecond[retryTime]得到下一次的延时时间,再根据排位表以及关系表得到该延时时间所存储的位置和分区,最后消息发送端将待消费的信息发送到该分区上以供消息消费端消费。

7.根据权利要求6所述的一种消息队列延迟方法,其特征在于:所述的分区和廷时时间戳的关系表中的分区根据消息主题所占的总分区数和主分区所占的区域数得到,其中所述主分区所占的区域数通过所述消费发送端计算,所述主分区所占的区域数等于所述消息主题所占的总分区数减去所述延时时间的种类数再加1。

8.根据权利要求7所述的一种消息队列延迟方法,其特征在于:当所述主分区所占的区域数为负值时,将所述主分区所占的区域数设置成1。

...

【技术特征摘要】

1.一种kafka代理客户端,其特征在于:包括消息发送端、kafka服务端和消息消费端,所述消息发送端与所述kafka服务端通信连接,所述消息消费端与所述kafka服务端通信连接;

2.根据权利要求1所述的一种kafka代理客户端,其特征在于:所述kafka代理客户端预设定有注释@mqtopic(value="x",consumdelaysecond={y}),以形成消息主题和延时时间,其中x为消息主题,{y}为所有延时时间组成的数组,以使延时时间存储到kafka服务端中对应的消息主题中的主分区或延时区中。

3.根据权利要求2所述的一种kafka代理客户端,其特征在于:所述主分区包括多个分区,所述主分区存储有数组{y}中的第一种延时时间,每个延时区均为一个分区,数组{y}中除了第一种延时时间外的剩余种类的延时时间按数组{y}内的元素的排列顺序依次存储于所述延时区,且每个延时区只存储一种延时时间。

4.根据权利要求3所述的一种kafka代理客户端,其特征在于:所述待消费信息包括信息体,所述信息体包括retrytime、createtime和donet...

【专利技术属性】
技术研发人员:李宝君何玉华
申请(专利权)人:全通金信控股广东有限公司
类型:发明
国别省市:

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

1