Producer
消息生产者,生产者的作用就是将消息发送到MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到MQ。
Producer Group
生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。在这里可以不用关心,只要知道有这么一个概念即可。
Consumer
消息消费者,简单来说,消费MQ上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。
Consumer Group
消费者组,和生产者类似,消费同一类消息的多个Consumer实例组成一个消费者组。
Topic
Topic是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单Topic存放订单相关的消息,一个是库存Topic存储库存相关的消息。
Message
Message是消息的载体。一个Message必须指定Topic,相当于寄信的地址。Message还有一个可选的Tag设置,以便消费端可以基于Tag进行过滤消息。也可以添加额外的键值对,例如你需要一个业务Key来查找Broker上的消息,方便在开发过程中诊断问题。
Tag
标签可以被认为是对Topic进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
Broker
Broker是RocketMQ系统的主要角色,其实就是前面一直说的MQ。Broker接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。通过提供轻量级的Topic和Queue机制来处理消息存储,同时支持推(push)和拉(pull)模式以及主从结构的容错机制。
NameServer
NameServer为Producer和Consumer提供路由信息。提供轻量级的服务发现和路由。每个NameServer记录完整的路由信息,提供等效的读写服务,并支持快速存储扩展。
由这张图可以看到有四个集群,分别是NameServer集群、Broker集群、Producer集群和Consumer集群:简单说明一下图中箭头含义,从Broker开始,Broker Master1和Broker Slave1是主从结构,它们之间会进行数据同步,即Date Sync。同时每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer中。Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer获取Topic路由信息,并向提供Topic服务的Broker Master建立长连接,且定时向Broker发送心跳。Producer只能将消息发送到Broker master,但是Consumer则不一样,它同时和提供Topic服务的Master和Slave建立长连接,既可以从Broker Master订阅消息,也可以从Broker Slave订阅消息。
RocketMQ集群部署模式
单Master模式
也就是只有一个Master节点,称不上是集群,一旦这个Master节点宕机,那么整个服务就不可用,适合个人学习使用。
多Master模式
多个Master节点组成集群,单个Master节点宕机或者重启对应用没有影响。
- 优点:所有模式中性能最高。
- 缺点:单个Master节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。
- 注意:使用同步刷盘可以保证消息不丢失,同时Topic相对应的queue应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该Topic的应用造成影响。
多Master多Slave异步复制模式
在多Master模式的基础上,每个Master节点都有至少一个对应的Slave。Master节点可读可写,但是Slave只能读不能写,类似于MySQL的主备模式。
- 优点:在Master宕机时,消费者可以从Slave读取消息,消息的实时性不会受影响,性能几乎和多Master一样。
- 缺点:使用异步复制的同步方式有可能会有消息丢失的问题。
多Master多Slave同步双写模式
同多Master多Slave异步复制模式类似,区别在于Master和Slave之间的数据同步方式。
- 优点:同步双写的同步模式能保证数据不丢失。
- 缺点:发送单个消息RT会略长,性能相比异步复制低10%左右。
- 刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)。
- 同步方式:同步双写和异步复制(指的一组Master和Slave之间数据的同步)。
- 注意:要保证数据可靠,需采用同步刷盘和同步双写的方式,但性能会较其他方式低。