System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于互联网,特别是一种扩展kafka消费模式的方法及装置。
技术介绍
1、kafka是由linkedin开发的一个分布式的消息队列系统。kafka开发的主要目标是构建一个用来处理海量日志用户行为和网站运营统计等的数据处理框架。kafka集群可以包含一个或多个kafka服务器,每条发布到kafka服务器的消息都有一个主题,该主题被称为topic,一个kafka服务器可以容纳多个topic,每个topic包含一个或多个分区partition。生产客户端可以向kafka服务器发送消息,消费客户端可以消费kafka服务器中的消息。
2、目前,在业务接入kafka服务器前需预估生产客户端和消费客户端的吞吐量来决定配置的主题(topic)的分区数量。消费者组(consumer group)是一个逻辑概念,表示一组消费者共同消费一个或多个主题中的所有分区,每个分区只能由消费者组中的一个消费者消费。对于一个消费者组,当消费者数量小于分区数时,部分消费者将被分配到多个分区;如果消费者数多于分区数,则部分消费者将会处于空闲的状态,可能等待其它消费者关闭或重新平衡。如果单个消费者消费阻塞或者缓慢,可能会导致对应分区消息堆积,如果依靠扩容分区提高吞吐量,相对比较复杂,这成为急需解决的技术问题。
技术实现思路
1、本专利技术的目的是提供一种扩展kafka消费模式的方法及装置,以解决现有技术中的不足,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多
2、本申请的一个实施例提供了一种扩展kafka消费模式的方法,所述方法包括:
3、接收kafka消费组内生成的消息消费请求;
4、根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
5、响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息id,将所述唯一消息id提交给服务端执行ack消费确认,并将经所述服务端ack消费确认后的所述待消费消息标记为已完成状态。
6、可选的,所述接收kafka消费组内生成的消息消费请求之后,所述方法还包括:
7、接收kafka消费组内传输的消息消费请求,根据消费者的标识,确定与所述消费者相对应的分区以及根据所述分区确定的所述待消费消息的偏移量。
8、可选的,所述待消费消息的唯一消息id根据所述待消费主题、所述分区以及所述待消费消息的偏移量确定。
9、可选的,所述待消费消息的偏移量通过所述服务端进行存储及更新。
10、可选的,所述响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息id,将所述唯一消息id提交给服务端执行ack消费确认,并将经所述服务端ack消费确认后的所述待消费消息标记为已完成状态,包括:
11、将所述待消费消息存储至一个或多个分区对应的消息链表中,获得所述待消费消息的唯一消息id;
12、将所述唯一消息id提交给服务端执行ack消费确认,为所述待消费消息添加消费检查点,设置消息ack的超时时间,并触发查询是否存在超时待确认的待消费消息的操作;
13、响应于将经所述服务端ack消费确认后的所述待消费消息标记为已完成状态。
14、可选的,所述将所述唯一消息id提交给服务端执行ack消费确认,为所述待消费消息添加消费检查点,设置消息ack的超时时间,并触发查询是否存在超时待确认的待消费消息的操作之后,所述方法还包括:
15、若查询到存在超时未确认的ack消费消息,将所述未确认的ack消费消息存储到重试主题中,并在接收到下一次拉取待消费消息时从所述重试主题中随机读取。
16、可选的,所述消费检查点中的消息ack情况存储于bitset中。
17、本申请的又一实施例提供了一种扩展kafka消费模式的装置,所述装置包括:
18、接收模块,用于接收kafka消费组内生成的消息消费请求;
19、拉取模块,用于根据所述消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息;
20、确认模块,用于响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息id,将所述唯一消息id提交给服务端执行ack消费确认,并将经所述服务端ack消费确认后的所述待消费消息标记为已完成状态。
21、可选的,所述接收模块之后,所述装置还包括:
22、偏移量确定模块,用于接收kafka消费组内传输的消息消费请求,根据消费者的标识,确定与所述消费者相对应的分区以及根据所述分区确定的所述待消费消息的偏移量。
23、可选的,所述确认模块,包括:
24、获得单元,用于将所述待消费消息存储至一个或多个分区对应的消息链表中,获得所述待消费消息的唯一消息id;
25、触发单元,用于将所述唯一消息id提交给服务端执行ack消费确认,为所述待消费消息添加消费检查点,设置消息ack的超时时间,并触发查询是否存在超时待确认的待消费消息的操作;
26、响应单元,用于响应于将经所述服务端ack消费确认后的所述待消费消息标记为已完成状态。
27、可选的,所述触发单元之后,所述装置还包括:
28、存储单元,用于若查询到存在超时未确认的ack消费消息,将所述未确认的ack消费消息存储到重试主题中,并在接收到下一次拉取待消费消息时从所述重试主题中随机读取。
29、本申请的又一实施例提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时实现上述任一项中所述的方法。
30、本申请的又一实施例提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以实现上述任一项中所述的方法。
31、与现有技术相比,本专利技术首先接收kafka消费组内生成的消息消费请求,然后根据消息消费请求,从待消费主题对应的一个或多个分区中拉取待消费消息,最后响应于对待消费消息的存储操作,生成待消费消息的唯一消息id,将唯一消息id提交给服务端执行ack消费确认,并将经服务端ack消费确认后的待消费消息标记为已完成状态,它通过取消一个分区只能由消费组下的一个消费者消费的条件限制,让分区可以一个消费者组中的多个消费者同时消费,实现客户端的无状态轻量化,避免消息重复消费,实现消费者的无限横向扩展。
本文档来自技高网...【技术保护点】
1.一种扩展Kafka消费模式的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述接收Kafka消费组内生成的消息消费请求之后,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述待消费消息的唯一消息ID根据所述待消费主题、所述分区以及所述待消费消息的偏移量确定。
4.根据权利要求3所述的方法,其特征在于,所述待消费消息的偏移量通过所述服务端进行存储及更新。
5.根据权利要求4所述的方法,其特征在于,所述响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息ID,将所述唯一消息ID提交给服务端执行ACK消费确认,并将经所述服务端ACK消费确认后的所述待消费消息标记为已完成状态,包括:
6.根据权利要求5所述的方法,其特征在于,所述将所述唯一消息ID提交给服务端执行ACK消费确认,为所述待消费消息添加消费检查点,设置消息ACK的超时时间,并触发查询是否存在超时待确认的待消费消息的操作之后,所述方法还包括:
7.根据权利要求5所述的方法,其特征在于,所述消费检查点
8.一种扩展Kafka消费模式的装置,其特征在于,所述装置包括:
9.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时实现所述权利要求1至7任一项中所述的方法。
10.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以实现所述权利要求1至7任一项中所述的方法。
...【技术特征摘要】
1.一种扩展kafka消费模式的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述接收kafka消费组内生成的消息消费请求之后,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述待消费消息的唯一消息id根据所述待消费主题、所述分区以及所述待消费消息的偏移量确定。
4.根据权利要求3所述的方法,其特征在于,所述待消费消息的偏移量通过所述服务端进行存储及更新。
5.根据权利要求4所述的方法,其特征在于,所述响应于对所述待消费消息的存储操作,生成所述待消费消息的唯一消息id,将所述唯一消息id提交给服务端执行ack消费确认,并将经所述服务端ack消费确认后的所述待消费消息标记为已完成状态,包括:
6.根据权利要求5...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。