RocketMq架构高性能设计思路

本文主要介绍RocketMq在性能方面做的相关优化

RocketMq架构

经常会提到RocketMq,其性能多么多么好,那么各位有没想过,其性能为什么好?
先从RocketMq架构层面入手,先上一张架构图
在这里插入图片描述

RocketMQ 架构上由 Broker、NameServer、Producer 和 Consumer 组成,各个组件功能如下

  • NameServer:注册中心和配置中心,管理集群的元数据,包括 Topic 信息和路由信息、Producer 和 Consumer 的客户端注册信息、Broker 的注册信息。是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
  • Broker:消息存储端,负责接收消息的生产和消费请求,并进行消息的持久化和消息的读取。Broker 分为 Master 与 Slave,一个 Master 可以对应多个 Slave。每个 Broker 与 Name Server 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 Name Server
  • Producer:负责生产消息,Producer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态,可集群部署
  • Consumer:负责消费消息,Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave 发送心跳。Consumer 既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定

Producer端相关实现

Topic元数据缓存

先从生产者出发,生产者首先得把消息发送到Mq服务端(也就是Broker端),自然得先知道这条消息得往哪个Broker上发(毕竟消息要做持久化,提供堆积能力,不然要Broker干嘛),因此Producer需要从NameServer中获取Topic对应的路由元数据(元数据即指的是Topic对应的队列信息、Broker信息),那么这个Topic的路由信息是不是可以缓存呢?

对应到代码里的实现如下org.apache.rocketmq.client.impl.producer.Defaul

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值