RocketMQ概述

RocketMQ是一个分布式消息中间件,支持多种消息类型。系统由Producer、Consumer、Broker、NameServer组成。NameServer管理Broker信息,Topic作为逻辑概念,由多个Queue实现分布式存储。Broker与NameServer保持心跳,消息存储在CommitLog中,通过ConsumeQueue提供索引。事务消息和延迟消息有特殊处理。消费者通过PullMessageProcessor从Queue拉取消息。
摘要由CSDN通过智能技术生成

       RocketMQ是一个分布式消息中间件,并支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。

       RocketMQ以Topic来管理不同应用的消息,对于生产者(producer)而言,发送消息时需要指定消息的Topic,对于消费者(consumer)而言,在启动后需要订阅相应的Topic,然后可以消费相应的消息。Topic是逻辑上的概念,在物理实现上,一个Topic由多个Queue组成,采用多个Queue的好处是可以将Broker存储分布式化,提高系统性能。

       首先来介绍下NameServer的功能,在RocketMQ的前身是使用ZooKeeper。NameServer用于管理所有Broker节点信息,接收Broker的注册/注销请求,此外还记录了Topic与Broker、Queue的对应关系,Broker主备信息。BrokerId为0代表是MasterBroker,否则BrokerId大于0的表示为SlaveBroker,Master和Slave组成一个Broker,具有相同的brokerName。Broker在启动的时候会去NameServer进行注册,会维护Broker的存活状态,Broker每次发送心跳过来的时候都会把Topic信息带上。NamesrvStartUp为启动类、NamesrvController为控制类、RouteInfoManager存放了Topic队列信息以及地址列表等一系列重要数据结构并提供了对应的数据变更接口、DefaultRequestProcessor负责处理所broker发过来的所有网络消息。各NameServer之间是相互独立且没有通信的,通过给Broker的namesrvAddr配置多个NameServer地址,同时向多个NameServer注册信息来实现NameServer集群。因为NameServer读写压力比较小,所以稳定性较高。相应的生产者/消费者中的namesrvAddr也是配置多个。

       再来看看Broker,每个Broker都会和NameServer建立一个长连接保持心跳。一个Topic分布在多个Broker上,一个Broker可以配置多个Topic。由于消息分布在各个Broker上,一旦某个Broker宕机,则该Broker上的消息读写都会受到影响。所以需要HA机制,RocketMQ的实现方式是master/slave,salve定时从master同步数据,如

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值