一种基于消息集群的消息消费方法及终端技术

技术编号:39674891 阅读:6 留言:0更新日期:2023-12-11 18:41
本发明专利技术公开了一种基于消息集群的消息消费方法及终端,从消息集群拉取消息之后,在消费线程消费消息的过程中,将消费线程中获取到的消息均转发至线程池中,并挂起消费线程,持续向消费线程发送心跳包;再通过消息处理线程处理线程池中的消息,当线程池中的剩余消息数量低于阈值时再次执行拉取待消费信息的操作,恢复被挂起的消费线程

【技术实现步骤摘要】
一种基于消息集群的消息消费方法及终端


[0001]本专利技术涉及消息处理
,特别涉及一种基于消息集群的消息消费方法及终端


技术介绍

[0002]Kafka
是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据
。poll
动作包括网页浏览

搜索和其他用户的行动,是在现代网络上的许多社会功能的一个关键因素
。poll
这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决
。poll
对于像
Hadoop
的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案
。Kafka
的目的是通过
Hadoop
的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费

[0003]而
Kafka
应用在大数据统计过程中,是针对大数据量的数据进行消息的产生于消息的消费来使用的

而其中消息的生产则是直接由生产者向
Kafka
进行消息的发送,消费消息则由消费线程来进行消息的消费操作

因为在很多的生产环境中,都必须使用
Kafka
集群的方式来消除单点故障,所以消费线程均是连接到整个
Kafka
集群中进行消息的消费动作

[0004]Kafka
的消费线程数和/>topic

partition
有关系,一类消息有一个主题,每个主题创建时,需要固定该主题的分区数,在某一时刻,一个
partition
只能有一个消费者线程能连接上

此时,存在一种情况就是当
Kafka
消费线程从
Kafka
集群中获取消息,采用
poll
方法直接拉取消息时,是拉取一定数量的消息出来,之后由消费线程消费这些消息

因为
poll
方法中既有发送心跳包的功能,又有消费线程去拉取数据的功能,此时如果在消费线程正在消费这批消息时,
Kafka
集群正在进行
rebalance
方法,
rebalance:pollKafka
集群中自我重新判定哪些
partition
可用,将会报错停止该消费线程,这是无法忍受的问题

[0005]而
Kafka
提供了一种可以设置
poll
超时时间参数
(session.timeout.ms)
,最大超时时间,就是心跳的间隔
。poll
方法拉取数据中会在
poll
该超时时间内发送一个心跳包至
pollKafka
中,如果拉取一批数据,消费消息时间超过
pollsession.timeout.mspoll
时间之后,无心跳发送,将强制进行
rebalance
,此时消费线程还在处理信息,将导致出错,线程退出,程序停止

[0006]一般为解决该问题的方式为:设置一个较大的超时时间,定义一个较少的每批数据获取量,但是该种方式存在一种隐患,即消费消息时间不可控,如果某一时刻,消费消息时间超过了
pollsession.timeout.mspoll
时间之后,程序就会出错退出


技术实现思路

[0007]本专利技术所要解决的技术问题是:提供一种基于消息集群的消息消费方法及终端,能够避免消息集群中的分区重分配机制导致消费线程消费异常的情况

[0008]为了解决上述技术问题,本专利技术采用的技术方案为:
[0009]一种基于消息集群的消息消费方法,包括步骤:
[0010]接收消息消费请求,从消息集群中拉取待消费消息,所述待消费消息对应至少两个分区,每个分区与对应的消费线程连接;
[0011]将所述消费线程中获取的消息转发至线程池,挂起每个分区上的消费线程,并持续向所述消息集群按照预设时间发送心跳包;
[0012]通过消息处理线程在所述线程池中处理消息,若所述线程池中的剩余消息的数量低于阈值,则再次从所述消息集群中拉取待消费消息,并恢复被挂起的消费线程

[0013]为了解决上述技术问题,本专利技术采用的另一种技术方案为:
[0014]一种基于消息集群的消息消费终端,包括存储器

处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0015]接收消息消费请求,从消息集群中拉取待消费消息,所述待消费消息对应至少两个分区,每个分区与对应的消费线程连接;
[0016]将所述消费线程中获取的消息转发至线程池,挂起每个分区上的消费线程,并持续向所述消息集群按照预设时间发送心跳包;
[0017]通过消息处理线程在所述线程池中处理消息,若所述线程池中的剩余消息的数量低于阈值,则再次从所述消息集群中拉取待消费消息,并恢复被挂起的消费线程

[0018]本专利技术的有益效果在于:从消息集群拉取消息之后,在消费线程消费消息的过程中,将消费线程中获取到的消息均转发至线程池中,并挂起消费线程,持续向消费线程发送心跳包;再通过消息处理线程处理线程池中的消息,当线程池中的剩余消息数量低于阈值时再次执行拉取待消费信息的操作,恢复被挂起的消费线程

以此方式,在每次拉取数据的过程中挂起消费线程,但是继续发送心跳包,防止消息集群自身因为没收到心跳而进行分区重分配,并且将消费线程中的消息转移至线程池中异步处理,能够提高消息消费效率

附图说明
[0019]图1为本专利技术实施例的一种基于消息集群的消息消费方法的流程图;
[0020]图2为本专利技术实施例的一种基于消息集群的消息消费终端的示意图;
[0021]标号说明:
[0022]1、
一种基于消息集群的消息消费终端;
2、
存储器;
3、
处理器

具体实施方式
[0023]为详细说明本专利技术的
技术实现思路


所实现目的及效果,以下结合实施方式并配合附图予以说明

[0024]请参照图1,本专利技术实施例提供了一种基于消息集群的消息消费方法,包括步骤:
[0025]接收消息消费请求,从消息集群中拉取待消费消息,所述待消费消息对应至少两个分区,每个分区与对应的消费线程连接;
[0026]将所述消费线程中获取的消息转发至线程池,挂起每个分区上的消费线程,并持续向所述消息集群按照预设时间发送心跳包;
[0027]通过消息处理线程本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.
一种基于消息集群的消息消费方法,其特征在于,包括步骤:接收消息消费请求,从消息集群中拉取待消费消息,所述待消费消息对应至少两个分区,每个分区与对应的消费线程连接;将所述消费线程中获取的消息转发至线程池,挂起每个分区上的消费线程,并持续向所述消息集群按照预设时间发送心跳包;通过消息处理线程在所述线程池中处理消息,若所述线程池中的剩余消息的数量低于阈值,则再次从所述消息集群中拉取待消费消息,并恢复被挂起的消费线程
。2.
根据权利要求1所述的一种基于消息集群的消息消费方法,其特征在于,所述挂起每个分区上的消费线程包括:获取所有消费线程的分区信息,根据所述分区信息挂起所述待消费消息的每个分区上的消费线程
。3.
根据权利要求1所述的一种基于消息集群的消息消费方法,其特征在于,所述从消息集群中拉取待消费消息包括:判断拉取到的待消费消息总数是否达到预设数量,若是,则为拉取操作设置暂停拉取的标识
。4.
根据权利要求3所述的一种基于消息集群的消息消费方法,其特征在于,若所述线程池中的剩余消息的数量低于阈值,则再次从所述消息集群中拉取待消费消息包括:若所述线程池中的消息处理完毕或者剩余消息的数量低于所述预设数量,则再次从所述消息集群中拉取预设数量的待消费消息,并为拉取操作取消暂停拉取的标识
。5.
根据权利要求1所述的一种基于消息集群的消息消费方法,其特征在于,所述通过消息处理线程在所述线程池中处理消息包括:通过消息处理线程异步在线程池中处理消息,每处理完一个消息则将待消费消息总数减一
。6.
一种基于消息集群的消息消费终端,包括存储器

【专利技术属性】
技术研发人员:刘德建郭孟祺陈娟郭凤英郑坦陈宏
申请(专利权)人:福建天泉教育科技有限公司
类型:发明
国别省市:

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

1