名称解析
Producer:消息生产者,负责产生消息,一般由业务系统负责产生消息。
Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费。
Push Consumer:Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦收到消 息,Consumer对象立 刻回调Listener接口方法。
Pull Consumer:Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动 权由应用控制。 Producer Group:一类Producer的集合名称,这类Producer通常发送一类消息,且发送逻辑一致。
Consumer Group:一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。
Broker:消息中转角色,负责存储消息,转发消息,一般也称为Server。在JMS规范中称为Provider。
Message Queue
在RocketMQ中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储单元都是定长,访问其中的存储单元使用Offset来访问,offset为java long类型。也可以认为MessageQueue是一个长度无限的数组,offset就是下标。
广播消费,集群消费
顺序消息,普通顺序消息,严格顺序消息
RocketMQ 定义
一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
Producer、Consumer、队列都可以分布式。Producer 向一些队列轮流发送消息,队列集合称为Topic,Consumer 如果做广播消费,则一个consumer实例消费这个Topic 对应的所有队列,如果做集群消费,则多个Consumer 实例平均消费这个topic 对应的队列集合。能够保证严格的消息顺序,提供丰富的消息拉取模式,高效的订阅者水平扩展能力,实时的消息订阅机制,亿级消息堆积能力,较少的依赖。
物理部署图
RocketMQ 网络部署特点
Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
Broker 部署相对复杂,Broker 分为Master 与Slave,一个Master 可以对应多个Slave,但是一个Slave 只能对应一个Master,Master 与Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0 表示Master,非0 表示Slave。Master 也可以部署多个。每个Broker 与Name Server 集群中的所有节点建立长连接,定时注册Topic 信息到所有Name Server。
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 Group:用来表示一个发送消息应用,一个Producer Group 下包含多个Producer 实例,作用标识一类Producer,可以通过运维工具查询这个发送消息应用下有多个Producer实例,发送分布式事务消息时,如果Producer中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。
Consumer Group:用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,一个Consumer Group下的多个Consumer以均摊方式消费消息,如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。
参考:http://alibaba.github.io/RocketMQ-docs/document/design/RocketMQ_design.pdf
转载于:https://my.oschina.net/u/943316/blog/888388