CN116112570A - 消息处理方法、装置、电子设备与存储介质 - Google Patents
消息处理方法、装置、电子设备与存储介质 Download PDFInfo
- Publication number
- CN116112570A CN116112570A CN202111327338.4A CN202111327338A CN116112570A CN 116112570 A CN116112570 A CN 116112570A CN 202111327338 A CN202111327338 A CN 202111327338A CN 116112570 A CN116112570 A CN 116112570A
- Authority
- CN
- China
- Prior art keywords
- message
- cluster
- routing
- federation
- topic
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 32
- 238000012545 processing Methods 0.000 claims abstract description 26
- 238000000034 method Methods 0.000 claims abstract description 22
- 238000005192 partition Methods 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 11
- 230000015556 catabolic process Effects 0.000 abstract description 5
- 238000006731 degradation reaction Methods 0.000 abstract description 5
- 238000004891 communication Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000012544 monitoring process Methods 0.000 description 6
- 230000009467 reduction Effects 0.000 description 6
- 230000007547 defect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种消息处理方法、装置、电子设备与存储介质,所述方法应用于消息路由中间层,所述方法包括:接收客户端发送的消息;基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。本发明提供的方法、装置、电子设备与存储介质,通过消息路由中间层将客户端发送的消息路由转发至集群联邦中对应的主题,当需要处理大量消息时,可以将这些消息所属的多个主题分配到集群联邦中的多个集群中,从而实现了为单个Kafka集群减轻负载,通过路由方式解决了主题过多时单个Kafka集群性能下降的问题,保证了Kafka集群的性能,提高了消息的高并发处理效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种消息处理方法、装置、电子设备与存储介质。
背景技术
Kafka是一种高吞吐量的分布式发布订阅消息系统,广泛应用于大数据处理领域。
目前,消息处理系统通常基于kafka集群进行构建。然而,kafka集群在主题(topic)数量到达成千上万时,会导致总分区数很多,磁盘读写退化为随机读写,严重影响性能,在该场景下无法满足业务需要。
发明内容
本发明提供一种消息处理方法、装置、电子设备与存储介质,用以解决现有技术中主题数量过多时kafka集群性能下降的缺陷,实现主题数量过多时保证Kafka集群的性能。
本发明提供一种消息处理方法,所述方法应用于消息路由中间层,所述方法包括:
接收客户端发送的消息;
基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。
根据本发明提供的一种消息处理方法,所述基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题,包括:
基于所述消息的请求头,确定所述消息对应的目标集群;
基于所述目标集群,以及所述消息所属的主题,将所述消息路由至所述目标集群中所述消息所属的主题。
根据本发明提供的一种消息处理方法,所述基于所述目标集群,以及所述消息所属的主题,将所述消息路由至所述目标集群中所述消息所属的主题,之前还包括:
若所述目标集群中不包括所述消息所属的主题,则向所述目标集群发出提示信息,以供所述目标集群创建所述消息所属的主题。
根据本发明提供的一种消息处理方法,所述基于所述消息的请求头,确定所述消息对应的目标集群,包括:
基于所述消息的请求头,以及所述集群联邦包括的集群数量,确定所述目标集群。
根据本发明提供的一种消息处理方法,所述基于所述消息的请求头,以及所述集群联邦包括的集群数量,确定所述目标集群,包括:
基于所述消息的请求头,所述集群数量,以及所述各集群包括的主题数量,确定所述目标集群。
根据本发明提供的一种消息处理方法,所述消息的请求头包括第一密钥和第二密钥;
所述基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题,包括:
基于所述第一密钥,将所述消息路由至集群联邦中对应的主题;
基于所述第二密钥,将所述消息路由至所述对应的主题中对应的分区。
根据本发明提供的一种消息处理方法,还包括:
基于客户端订阅的主题,从所述集群联邦中拉取所述客户端订阅的主题中的消息;
将所述客户端订阅的主题中的消息转发给所述客户端。
本发明还提供一种消息处理装置,所述装置应用于消息路由中间层,所述装置包括:
接收模块,用于接收客户端发送的消息;
路由模块,用于基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述消息处理方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述消息处理方法的步骤。
本发明提供的消息处理方法、装置、电子设备与存储介质,通过消息路由中间层将客户端发送的消息路由转发至集群联邦中对应的主题,当需要处理大量消息时,可以将这些消息所属的多个主题分配到集群联邦中的多个集群中,从而实现了为单个Kafka集群减轻负载,通过路由方式解决了主题过多时单个Kafka集群性能下降的问题,保证了Kafka集群的性能,提高了消息的高并发处理效率,能够满足高并发场景下的业务需求。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的消息处理方法的流程示意图;
图2是本发明提供的消息处理系统的结构示意图;
图3是本发明提供的消息处理装置的结构示意图;
图4是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
消息队列是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。当前传统的消息队列(Message Queue,MQ)有RabbitMQ、ActiveMQ、RocketMQ等。
RabbitMQ是用erlang语言开发的消息队列系统,非常重量级,适合企业级开发,核心是生产者不会将消息直接发送给队列,消息在发送给客户端时先在中心队列排队,缺点是不利于二次开发和维护,运行速度较慢,消息封装后较大。ActiveMQ是开源消息队列系统,少量代码就可以高效实现高级应用场景,可插拔的传输协议支持,缺点是社区活跃度不太高,不适用于上千个队列的应用场景,有消息丢失的可能。RocketMQ是Java语言编写的,性能稳定性和可靠性都是值得信赖,采用发布/订阅模式,但缺少与周边生态系统的集成和兼容。
Kafka是一个分布式发布——订阅消息系统和一个强大的队列,可以处理大量的数据,并能够将消息从一个端点传递到另一个端点。Kafka适合离线和在线消息消费。Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失。Kafka构建在ZooKeeper同步服务之上。它与Storm和Spark可以非常好地集成,用于实时流式数据分析,具备可靠性、可扩展性和耐用性的同时兼顾性能,广泛应用于大数据处理领域。Kafka可解决如下几个问题:1)分布式系统指标采集;2)日志聚合;3)流处理;4)分布式场景下,数据的生成、消费安全。
对此,本发明实施例基于Kafka,提供了一种消息处理方法。图1是本发明提供的消息处理方法的流程示意图,如图1所示,该方法的执行主体为消息路由中间层,该方法包括:
步骤110,接收客户端发送的消息;
步骤120,基于消息的请求头,将消息路由至集群联邦中对应的主题;集群联邦包括多个集群,各集群包括多个主题。
具体地,考虑到现有的消息处理系统通常仅包括单个Kafka集群,对于需要处理大量消息的场景,例如订单、日志等业务场景,单个Kafka集群在主题(topic)数量到达成千上万时,会导致总分区数很多,磁盘读写退化为随机读写,严重影响性能,在该场景下无法满足业务需要。针对这一问题,本发明实施例用集群联邦替换现有的单个Kafka集群,此处的集群联邦可以由多个Kafka集群组成,在此基础上,在集群联邦与客户端之间添加一个高可用的消息路由中间层,消息路由中间层可以将客户端发送的消息按照主题类型分发给集群联邦中各个集群,从而可以将该场景下多个相关主题分配到多个集群中,进而可以分摊原来单个集群的压力,解决了主题过多时单个Kafka集群性能下降的问题。
消息路由中间层可以作为客户端与集群联邦之间的代理通信,当消息路由中间层接收到客户端发送的消息之后,可以根据该消息的请求头进行消息路由转发,将该消息路由到集群联邦中对应的主题中。此处,消息的请求头中可以包括消息的头信息,例如,密钥信息(key)。消息路由中间层具体可以按照针对消息请求头的路由策略进行消息路由转发,路由策略例如可以包括请求头A对应的消息应该分配到哪一个Kafka集群、请求头B对应的消息应该分配到哪一个Kafka集群等,路由策略可以是消息路由中间层基于客户端自定义的规则生成,也可以是消息路由中间层基于自身的规则生成,本发明实施例对此不作具体限定。另外,本发明实施例对于集群联邦包括的集群数量以及各集群包括的主题数量也不作具体限定。
可以理解的是,集群联邦中各个Kafka集群之间不用互相通信,只需要与消息路由中间层进行通信,接收消息路由中间层路由的消息即可,可以避免跨集群进行消息路由导致时序性低的问题。另外,消息路由中间层会对集群联邦中的信息进行维护,例如,集群联邦中包括的集群数量、各集群中包括的主题数量、各主题中包括的分区数量等,然后再根据这些信息制定路由策略进行消息路由转发,对于客户端来说,无需关注主题被分配到多少个集群中,即使集群联邦中集群数量发生变化,也不会对客户端产生影响。
需要说明的是,区别于现有的消息处理方法,客户端直接给单个Kafka集群发送消息,当单个Kafka集群中主题过多时,会导致单个Kafka集群由顺序写入变为随机写入,吞吐量降低。本发明实施例应用消息路由中间层,将客户端发送的消息路由转发给集群联邦,将多个主题分配到集群联邦中的多个Kafka集群中,从而实现了为单个Kafka集群减轻负载,通过路由方式解决了主题过多时单个Kafka集群性能下降的问题,每个Kafka集群仍能保证消息的顺序读写,进而提高了消息的处理效率,保证了整个系统的高吞吐量,能够满足高并发场景下的业务需求。
本发明实施例提供的方法,通过消息路由中间层将客户端发送的消息路由转发至集群联邦中对应的主题,当需要处理大量消息时,可以将这些消息所属的多个主题分配到集群联邦中的多个集群中,从而实现了为单个Kafka集群减轻负载,通过路由方式解决了主题过多时单个Kafka集群性能下降的问题,保证了Kafka集群的性能,提高了消息的高并发处理效率,能够满足高并发场景下的业务需求。
基于上述任一实施例,步骤120中,基于消息的请求头,将消息路由至集群联邦中对应的主题,包括:
基于消息的请求头,确定消息对应的目标集群;
基于目标集群,以及消息所属的主题,将消息路由至目标集群中消息所属的主题。
具体地,消息路由转发的具体方式可以是消息路由中间层根据当前消息的请求头,以及路由策略,确定将该消息分配到集群联邦中具体哪一个集群,即目标集群,随即,消息路由中间层与集群联邦中该目标集群进行通信,并根据该消息所属的主题,将该消息路由至该目标集群中消息所属的主题。此处,具体的路由方式可以根据消息路由中间层中预先配置的路由信息确定,路由信息可以根据不同的业务需求去自定义配置,例如可以是hash、key、int值、取模等,本发明实施例对此不作具体限定。
基于上述任一实施例,基于目标集群,以及消息所属的主题,将消息路由至目标集群中消息所属的主题,之前还包括:
若目标集群中不包括消息所属的主题,则向目标集群发出提示信息,以供目标集群创建消息所属的主题。
具体地,考虑到如果目标集群中没有消息所属的主题,消息路由中间层接收到客户端发送的消息之后,会无法确定将该消息往哪路由,对此,本发明实施例中消息路由中间层可以从集群联邦获取各集群所包括的主题,如果检测到目标集群中不包括消息所属的主题,则可以向目标集群发出提示信息,以供目标集群根据该提示信息创建消息所属的主题,后续进行消息路由的时候就可以将该消息路由到该主题中;如果检测到目标集群中包括消息所属的主题,则无需其他操作,后续进行消息路由的时候就可以直接将该消息路由到该主题中。
基于上述任一实施例,基于消息的请求头,确定消息对应的目标集群,包括:
基于消息的请求头,以及集群联邦包括的集群数量,确定目标集群。
具体地,消息路由中间层在确定目标集群之前,可以从集群联邦中获取集群联邦包括的集群数量,由此来更新路由策略,此处,可以仅根据集群联邦包括的集群数量确定路由策略,例如,集群联邦包括的集群数量为3个,路由策略可以是根据不同消息的请求头将这些消息分配到3个Kafka集群中的策略,又例如,集群联邦包括的集群数量为5个,路由策略可以是根据不同消息的请求头将这些消息分配到5个Kafka集群中的策略,也可以根据集群联邦包括的集群数量以及其他信息综合来确定路由策略,例如,集群联邦包括3个Kafka集群,检测到其中一个集群的消息写入速率过慢,则路由策略可以变更为根据不同消息的请求头将后续这些消息分配到其余2个Kafka集群中的策略,又例如,集群联邦包括3个Kafka集群,检测到其中一个集群所包括的主题数量过多,则路由策略可以变更为根据不同消息的请求头将后续这些消息分配到其余2个Kafka集群中的策略,本发明实施例对此不作具体限定。
随即,消息路由中间层可以根据当前消息的请求头,以及该路由策略,确定将该消息分配到集群联邦中具体哪一个集群,即目标集群。
基于上述任一实施例,基于消息的请求头,以及集群联邦包括的集群数量,确定目标集群,包括:
基于消息的请求头,集群数量,以及各集群包括的主题数量,确定目标集群。
具体地,考虑到如果仅根据集群数量进行路由策略的确定,可能会存在集群联邦中各集群所包括的主题数量分布不均的情况,导致各集群的负载不均。针对这一问题,本发明实施例中消息路由中间层在确定目标集群之前,既可以从集群联邦中获取集群联邦包括的集群数量,还可以从集群联邦获取集群联邦中各集群包括的主题数量,此时,路由策略可以包括如果检测到某一Kafka集群中所包括的主题数量较低,则可以将消息优先路由到该集群中,即将该集群作为目标集群,而如果检测到各Kafka集群中所包括的主题数量较为均匀时,则仍可以根据消息的请求头,以及集群联邦包括的集群数量,确定将该消息分配到集群联邦中具体哪一个集群,即目标集群。
基于上述任一实施例,消息的请求头包括第一密钥和第二密钥;
基于消息的请求头,将消息路由至集群联邦中对应的主题,包括:
基于第一密钥,将消息路由至集群联邦中对应的主题;
基于第二密钥,将消息路由至对应的主题中对应的分区。
具体地,消息的请求头可以包括第一密钥(key),第一密钥可以用于指示该消息需要被分配到集群联邦中哪一个集群,在此基础上,消息路由层即可根据该第一密钥,以及已知的该消息所属的主题,将该消息路由至该集群中对应的主题。考虑到每个主题被分成一个或多个分区(partition),每个分区由一系列有序、不可变的消息组成,是一个有序队列,因此,消息的请求头还可以包括第二密钥,第二密钥可以用于指示该消息需要被分配到对应主题中哪一个分区,根据该第二密钥,消息路由层即可将该消息路由至对应主题中的该分区。
此处,第一密钥可以是由消息路由中间层基于默认规则添加到消息的请求头中的,第二密钥可以是由客户端添加到消息的请求头中,再转发给消息路由中间层的,也可以是由消息路由中间层基于默认规则添加到消息的请求头中的,本发明实施例对此不作具体限定。进一步地,考虑到Kafka集群由多个Kafka实例组成,每个实例(server)均成为broker,对此,消息的请求头还可以包括第三密钥,第三密钥可以用于指示该消息需要被分配到Kafka集群中哪一个broker。
基于上述任一实施例,该方法还包括:
基于客户端订阅的主题,从集群联邦中拉取客户端订阅的主题中的消息;
将客户端订阅的主题中的消息转发给客户端。
具体地,当客户端需要消费消息时,此时的客户端可以称为消费者,消费者可以订阅集群联邦中的各个主题,当消费者订阅某一个主题时,消息路由中间层可以根据该主题从集群联邦中拉取该主题中的消息,再将该主题中的消息转发给消费者,以供消费者对该主题中的消息进行消费。进一步地,消费者可以向消息路由中间层发送消息请求,该消息请求中可以携带用于表征消费者订阅的主题的信息,当消息路由中间层接收到该消息请求之后,即可获取消费者所订阅的主题。
基于上述任一实施例,本发明实施例基于Kafka集群,提供了一种消息处理系统。图2是本发明提供的消息处理系统的结构示意图,如图2所示,该系统包括客户端(即图2中的Client)、消息路由中间层(即图2中的Middle Layer)、集群联邦(即图2中的KafkaCluster Federation)和Zookeeper集群(即图2中的Zookeeper Cluster)。
Zookeeper集群用于分布式架构的消息传递等业务。每个主题被分成一个或多个partition,partition中的每个消息都有一个连续的序列号叫做offset,由客户端来维护消费到哪个offset,并需要提供给Zookeeper集群。另外,集群联邦中各个Kafka集群的元信息都需要以register的方式在Zookeeper集群中进行注册保存。此处,元信息可以包括Kafka集群在哪个服务器上创建主题、主题有几个分区、客户端在分区里面消费到哪条消息等信息,本发明实施例对此不作具体限定。
当客户端需要发送消息时,此时的客户端可以称为生产者,生产者将消息以send的方式发送到消息路由中间层,再由消息路由中间层将消息路由到集群联邦中某个特定的主题。消息路由中间层可以包括主题缓存区(即图2中的Topic Cache),由主题缓存区从集群联邦中拉取集群信息、各Kafka集群中的主题信息(即图2中的Topic Info)等相关信息,此处的集群信息例如可以是集群联邦中包括的集群数量,主题信息例如可以是主题的数量、主题的名称、各主题中包括的分区数量,并对获取到的这些相关信息进行存储,在进行消息路由转发时,即可根据这些相关信息确定路由策略,并根据消息的请求头(即图2中的Header:key)进行消息的路由分配。
当客户端需要消费消息时,此时的客户端可以称为消费者,消费者可以订阅某个主题,消息路由中间层以poll的方式从集群联邦中拉取该主题中的消息,并将该消息转发给消费者,以供消费者对该消息进行消费。消息路由中间层的主题缓存区中还可以存储消费的偏移量等信息,从而消息路由中间层可以根据该偏移量进行拉取消息。
进一步地,消息处理系统还可以添加监控机制,该监控机制可以采集集群联邦中各个Kafka集群的信息以及Zookeeper集群里的信息,并根据这些信息对集群联邦中各个Kafka集群进行监控。集群联邦中Kafka集群支持动态扩容,当监控机制监控到某个Kafka集群中出现消息消费不了、消息消费速率或写入速率过慢等问题时,可以对该Kafka集群进行扩容操作,即在该Kafka集群基础上再新增Kafka集群,例如,监控机制监控到Kafka集群A由一秒消费10万个数据减慢到一秒仅消费1万个数据,则可以对Kafka集群A进行扩容操作,在Kafka集群A的基础上新增Kafka集群B。
如果集群联邦中的集群数量发生变更,消息路由中间层也会对所存储的相关信息进行更新,当接收到消息路由中间层相关主题的消息之后,可以将该消息路由到新增Kafka集群中的对应主题,例如,在上述示例中,消息路由中间层后续如果接收到与Kafka集群A中相同主题对应的消息,则可以将这些消息路由到新增的Kafka集群B中。
当然,如果监控机制监控到集群联邦中所有Kafka集群均出现消息消费不了、消息消费速率或写入速率过慢等问题时,也可以对原有集群联邦进行扩容操作,即在原有Kafka集群整体的基础上再新增Kafka集群,例如,原有集群联邦包括3个Kafka集群,监控机制监控到这3个Kafka集群的消息写入速率均过慢,则可以对这3个Kafka集群进行扩容操作,增添新的2个Kafka集群,使得新的集群联邦中包括的集群数量变更为5个。
另外,Zookeeper集群里还可以配置有watch机制,当存在事件变化,例如,Kafka集群中主题的增加、删除、修改等,watch机制会以事件消息的方式推送给消息路由中间层,消息路由层可以根据事件消息进行信息更新,从而可以保证消息路由层所存储的相关信息是最新的,进而可以保证后续消息路由的顺利进行。
消息路由中间层的主题缓存区除了会存储集群信息、各集群上的主题信息等集群联邦中相关信息之外,还会预先配置路由信息,此处的路由信息可以根据不同的业务需求去自定义配置,例如可以是hash、key、int值、取模等,本发明实施例对此不作具体限定。消息路由中间层通过集群联邦中相关信息以及路由信息,可以实现将多个主题配置到集群联邦中的多个Kafka集群中。
需要说明的是,消息路由中间层只根据消息请求头进行消息路由转发,不进行业务处理。消息路由中间层能够实现Kafka集群的通信协议,因此,可以保证应用程序访问消息路由中间层与访问集群联邦中各Kafka集群是一样的。另外,消息路由中间层不会对消息的先后顺序造成影响,消息被转发到集群联邦之后,仍会保持原来的先后顺序。为了避免消息路由中间层出现单点故障,导致后续集群联邦无法使用,消息路由中间层可以设置多个提供相同功能的组件,用于接收客户端发送的消息。
本发明实施例提供的系统,通过消息路由中间层将客户端发送的消息路由转发至集群联邦中对应的主题,当需要处理大量消息时,可以将这些消息所属的多个主题分配到集群联邦中的多个集群中,从而实现了为单个Kafka集群减轻负载,通过路由方式解决了主题过多时单个Kafka集群性能下降的问题,保证了Kafka集群的性能,提高了消息的高并发处理效率,能够满足高并发场景下的业务需求。
下面对本发明提供的消息处理装置进行描述,下文描述的消息处理装置与上文描述的消息处理方法可相互对应参照。
基于上述任一实施例,本发明实施例提供了一种消息处理装置。图3是本发明提供的消息处理装置的结构示意图,如图3所示,该装置的执行主体为消息路由中间层,该装置包括:
接收模块310,用于接收客户端发送的消息;
路由模块320,用于基于消息的请求头,将消息路由至集群联邦中对应的主题;集群联邦包括多个集群,各集群包括多个主题。
具体地,考虑到现有的消息处理系统通常仅包括单个Kafka集群,对于需要处理大量消息的场景,例如订单、日志等业务场景,单个Kafka集群在主题(topic)数量到达成千上万时,会导致总分区数很多,磁盘读写退化为随机读写,严重影响性能,在该场景下无法满足业务需要。针对这一问题,本发明实施例用集群联邦替换现有的单个Kafka集群,此处的集群联邦可以由多个Kafka集群组成,在此基础上,在集群联邦与客户端之间添加一个高可用的消息路由中间层,消息路由中间层可以将客户端发送的消息按照主题类型分发给集群联邦中各个集群,从而可以将该场景下多个相关主题分配到多个集群中,进而可以分摊原来单个集群的压力,解决了主题过多时单个Kafka集群性能下降的问题。
消息路由中间层可以作为客户端与集群联邦之间的代理通信,当消息路由中间层接收到客户端发送的消息之后,可以根据该消息的请求头进行消息路由转发,将该消息路由到集群联邦中对应的主题中。此处,消息的请求头中可以包括消息的头信息,例如,密钥信息(key)。消息路由中间层具体可以按照针对消息请求头的路由策略进行消息路由转发,路由策略例如可以包括请求头A对应的消息应该分配到哪一个Kafka集群、请求头B对应的消息应该分配到哪一个Kafka集群等,路由策略可以是消息路由中间层基于客户端自定义的规则生成,也可以是消息路由中间层基于自身的规则生成,本发明实施例对此不作具体限定。另外,本发明实施例对于集群联邦包括的集群数量以及各集群包括的主题数量也不作具体限定。
可以理解的是,集群联邦中各个Kafka集群之间不用互相通信,只需要与消息路由中间层进行通信,接收消息路由中间层路由的消息即可,可以避免跨集群进行消息路由导致时序性低的问题。另外,消息路由中间层会对集群联邦中的信息进行维护,例如,集群联邦中包括的集群数量、各集群中包括的主题数量、各主题中包括的分区数量等,然后再根据这些信息制定路由策略进行消息路由转发,对于客户端来说,无需关注主题被分配到多少个集群中,即使集群联邦中集群数量发生变化,也不会对客户端产生影响。
需要说明的是,区别于现有的消息处理方法,客户端直接给单个Kafka集群发送消息,当单个Kafka集群中主题过多时,会导致单个Kafka集群由顺序写入变为随机写入,吞吐量降低。本发明实施例应用消息路由中间层,将客户端发送的消息路由转发给集群联邦,将多个主题分配到集群联邦中的多个Kafka集群中,从而实现了为单个Kafka集群减轻负载,通过路由方式解决了主题过多时单个Kafka集群性能下降的问题,每个Kafka集群仍能保证消息的顺序读写,进而提高了消息的处理效率,保证了整个系统的高吞吐量,能够满足高并发场景下的业务需求。
本发明实施例提供的装置,通过消息路由中间层将客户端发送的消息路由转发至集群联邦中对应的主题,当需要处理大量消息时,可以将这些消息所属的多个主题分配到集群联邦中的多个集群中,从而实现了为单个Kafka集群减轻负载,通过路由方式解决了主题过多时单个Kafka集群性能下降的问题,保证了Kafka集群的性能,提高了消息的高并发处理效率,能够满足高并发场景下的业务需求。
基于上述任一实施例,路由模块320包括:
集群确定子模块,用于基于消息的请求头,确定消息对应的目标集群;
路由子模块,用于基于目标集群,以及消息所属的主题,将消息路由至目标集群中消息所属的主题。
基于上述任一实施例,该装置还包括提示模块,用于:
若目标集群中不包括消息所属的主题,则向目标集群发出提示信息,以供目标集群创建消息所属的主题。
基于上述任一实施例,集群确定子模块包括集群确定单元,用于:
基于消息的请求头,以及集群联邦包括的集群数量,确定目标集群。
基于上述任一实施例,集群确定单元还用于:
基于消息的请求头,集群数量,以及各集群包括的主题数量,确定目标集群。
基于上述任一实施例,消息的请求头包括第一密钥和第二密钥;
路由模块320包括:
主题路由子模块,用于基于第一密钥,将消息路由至集群联邦中对应的主题;
分区路由子模块,用于基于第二密钥,将消息路由至对应的主题中对应的分区。
基于上述任一实施例,该装置还包括拉取模块,用于:
基于客户端订阅的主题,从集群联邦中拉取客户端订阅的主题中的消息;
将客户端订阅的主题中的消息转发给客户端。
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行消息处理方法,该方法应用于消息路由中间层,该方法包括:接收客户端发送的消息;基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的消息处理方法,该方法应用于消息路由中间层,该方法包括:接收客户端发送的消息;基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的消息处理方法,该方法应用于消息路由中间层,该方法包括:接收客户端发送的消息;基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种消息处理方法,其特征在于,所述方法应用于消息路由中间层,所述方法包括:
接收客户端发送的消息;
基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。
2.根据权利要求1所述的消息处理方法,其特征在于,所述基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题,包括:
基于所述消息的请求头,确定所述消息对应的目标集群;
基于所述目标集群,以及所述消息所属的主题,将所述消息路由至所述目标集群中所述消息所属的主题。
3.根据权利要求2所述的消息处理方法,其特征在于,所述基于所述目标集群,以及所述消息所属的主题,将所述消息路由至所述目标集群中所述消息所属的主题,之前还包括:
若所述目标集群中不包括所述消息所属的主题,则向所述目标集群发出提示信息,以供所述目标集群创建所述消息所属的主题。
4.根据权利要求2所述的消息处理方法,其特征在于,所述基于所述消息的请求头,确定所述消息对应的目标集群,包括:
基于所述消息的请求头,以及所述集群联邦包括的集群数量,确定所述目标集群。
5.根据权利要求4所述的消息处理方法,其特征在于,所述基于所述消息的请求头,以及所述集群联邦包括的集群数量,确定所述目标集群,包括:
基于所述消息的请求头,所述集群数量,以及所述各集群包括的主题数量,确定所述目标集群。
6.根据权利要求1至5中任一项所述的消息处理方法,其特征在于,所述消息的请求头包括第一密钥和第二密钥;
所述基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题,包括:
基于所述第一密钥,将所述消息路由至集群联邦中对应的主题;
基于所述第二密钥,将所述消息路由至所述对应的主题中对应的分区。
7.根据权利要求1至5中任一项所述的消息处理方法,其特征在于,还包括:
基于客户端订阅的主题,从所述集群联邦中拉取所述客户端订阅的主题中的消息;
将所述客户端订阅的主题中的消息转发给所述客户端。
8.一种消息处理装置,其特征在于,所述装置应用于消息路由中间层,所述装置包括:
接收模块,用于接收客户端发送的消息;
路由模块,用于基于所述消息的请求头,将所述消息路由至集群联邦中对应的主题;所述集群联邦包括多个集群,各集群包括多个主题。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述消息处理方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述消息处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111327338.4A CN116112570A (zh) | 2021-11-10 | 2021-11-10 | 消息处理方法、装置、电子设备与存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111327338.4A CN116112570A (zh) | 2021-11-10 | 2021-11-10 | 消息处理方法、装置、电子设备与存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116112570A true CN116112570A (zh) | 2023-05-12 |
Family
ID=86262532
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111327338.4A Pending CN116112570A (zh) | 2021-11-10 | 2021-11-10 | 消息处理方法、装置、电子设备与存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116112570A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107888499A (zh) * | 2017-11-17 | 2018-04-06 | 北京邮电大学 | 一种基于sdn的发布订阅系统及消息转发方法 |
CN108282514A (zh) * | 2017-12-12 | 2018-07-13 | 北京奇艺世纪科技有限公司 | 一种分布式业务建立方法及装置 |
CN108768826A (zh) * | 2018-05-16 | 2018-11-06 | 华南理工大学 | 基于MQTT和Kafka高并发场景下的消息路由方法 |
CN109451072A (zh) * | 2018-12-29 | 2019-03-08 | 广东电网有限责任公司 | 一种基于Kafka的消息缓存系统和方法 |
CN111092816A (zh) * | 2019-11-26 | 2020-05-01 | 金蝶软件(中国)有限公司 | 网关动态路由方法、装置、计算机设备和存储介质 |
CN113014672A (zh) * | 2021-04-07 | 2021-06-22 | 广州趣丸网络科技有限公司 | 一种消息推送方法、装置、电子设备及存储介质 |
CN113037823A (zh) * | 2015-01-23 | 2021-06-25 | 电子湾有限公司 | 消息传递系统和方法 |
-
2021
- 2021-11-10 CN CN202111327338.4A patent/CN116112570A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113037823A (zh) * | 2015-01-23 | 2021-06-25 | 电子湾有限公司 | 消息传递系统和方法 |
CN107888499A (zh) * | 2017-11-17 | 2018-04-06 | 北京邮电大学 | 一种基于sdn的发布订阅系统及消息转发方法 |
CN108282514A (zh) * | 2017-12-12 | 2018-07-13 | 北京奇艺世纪科技有限公司 | 一种分布式业务建立方法及装置 |
CN108768826A (zh) * | 2018-05-16 | 2018-11-06 | 华南理工大学 | 基于MQTT和Kafka高并发场景下的消息路由方法 |
CN109451072A (zh) * | 2018-12-29 | 2019-03-08 | 广东电网有限责任公司 | 一种基于Kafka的消息缓存系统和方法 |
CN111092816A (zh) * | 2019-11-26 | 2020-05-01 | 金蝶软件(中国)有限公司 | 网关动态路由方法、装置、计算机设备和存储介质 |
CN113014672A (zh) * | 2021-04-07 | 2021-06-22 | 广州趣丸网络科技有限公司 | 一种消息推送方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108768826B (zh) | 基于MQTT和Kafka高并发场景下的消息路由方法 | |
JP4900982B2 (ja) | サーバ・クラスタにおいてフェイルオーバを管理するための方法、フェイルオーバ・サーバ及びコンピュータ・プログラム | |
US9021038B2 (en) | Message delivery in messaging networks | |
CN112583931B (zh) | 消息处理方法、消息中间件、电子设备和存储介质 | |
CN106021315B (zh) | 一种应用程序的日志管理方法及系统 | |
CN111966289B (zh) | 基于Kafka集群的分区优化方法和系统 | |
CN108427619B (zh) | 日志管理方法、装置、计算设备及存储介质 | |
US20190363940A1 (en) | Methods, apparatuses and computer-readable mediums for group-based scalable network resource controller clusters | |
US20110131288A1 (en) | Load-Balancing In Replication Engine of Directory Server | |
CN114900449B (zh) | 一种资源信息管理方法、系统及装置 | |
CN111400041A (zh) | 服务器配置文件的管理方法、装置及计算机可读存储介质 | |
CN114610504A (zh) | 消息处理方法、装置、电子设备及存储介质 | |
US10498617B1 (en) | System, method, and computer program for highly available and scalable application monitoring | |
CN111163118B (zh) | 一种Kafka集群中的消息传输方法及装置 | |
JP2740105B2 (ja) | 分散データベース制御方法 | |
CN108111630B (zh) | 一种Zookeeper集群系统及其连接方法和系统 | |
CN113971098A (zh) | 一种RabbitMQ消费管理方法及系统 | |
CN113347238A (zh) | 基于区块链的消息分区方法及系统、设备、存储介质 | |
CN117118982A (zh) | 基于云原生多集群的消息传输方法、装置、介质及设备 | |
US10990385B1 (en) | Streaming configuration management | |
CN116112570A (zh) | 消息处理方法、装置、电子设备与存储介质 | |
CN116149814A (zh) | 一种基于kafka的数据持久化任务分布式调度方法及系统 | |
CN116089079A (zh) | 一种基于大数据的计算机资源分配管理系统及方法 | |
CN114598662A (zh) | 消息队列集群联邦管理系统以及方法 | |
CN114448995A (zh) | 基于raft选主策略的分布式计算方法 |
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 |