README.md 2.9 KB
Newer Older
武汉红喜's avatar
README  
武汉红喜 已提交
1 2
# [Apache RocketMQ](https://github.com/apache/rocketmq)
分布式消息中间件
武汉红喜's avatar
武汉红喜 已提交
3 4

### Test
武汉红喜's avatar
README  
武汉红喜 已提交
5
- .properties指定rocketmqHome,namesrvAddr等,依次启动NamesrvStartup,BrokerStartup,Consumer,Producer
武汉红喜's avatar
武汉红喜 已提交
6 7
- 管理后台:https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console
- 命令行管理工具MQAdmin: bin/mqadmin
武汉红喜's avatar
武汉红喜 已提交
8 9 10 11

### User Guide
- 每个主题可设置队列个数,默认4个,需要顺序消费的消息发往同一队列,比如同一订单号相关的几条需要顺序消费的消息发往同一队列,
顺序消费的特点的是,不会有两个消费者共同消费任一队列,且当消费者数量小于队列数时,消费者会消费多个队列。至于消息重复,在消
武汉红喜's avatar
武汉红喜 已提交
12 13 14
费端处理。事务消息功能已在4.x版本去除,不过一些上层Class都还在,用户可以根据实际需求实现自己定事务功能。
- Broker上存Topic信息,Topic由多个队列组成,队列会平均分散在多个Broker上。Producer的发送机制保证消息尽量平均分布到
所有队列中,最终效果就是所有消息都平均落在每个Broker上。Consumer的个数应不大于队列数。
武汉红喜's avatar
README  
武汉红喜 已提交
15
- ConsumerQueue相当于CommitLog的索引文件,消费者消费时会先从ConsumerQueue中查找消息在commitLog中的offset,再去
武汉红喜's avatar
武汉红喜 已提交
16
CommitLog中找元数据。如果某个消息只在CommitLog中有数据,没在ConsumerQueue中,则消费者无法消费。
武汉红喜's avatar
武汉红喜 已提交
17
- RocketMQ的高性能在于顺序写(CommitLog)和零拷贝,高可靠性在于刷盘和Master-Slave。
武汉红喜's avatar
..  
武汉红喜 已提交
18 19 20 21
- RocketMQ具有很好动态伸缩能力(非顺序消息),伸缩性体现在Topic和Broker两个维度。
  + Topic维度:假如一个Topic的消息量特别大,但集群水位压力还是很低,就可以扩大该Topic的队列数,Topic的队列数跟发送、消费速度成正比。
  + Broker维度:如果集群水位很高了,需要扩容,直接加机器部署Broker就可以。Broker起来后向Namesrv注册,Producer、Consumer通过Namesrv
  发现新Broker,立即跟该Broker直连,收发消息。
武汉红喜's avatar
武汉红喜 已提交
22 23
- MQClientInstance是客户端各种类型的Consumer和Producer的底层类,由它与NameServer和Broker打交道。如果创建Consumer或Producer
类型的时候不手动指定InstanceName,进程中只会有一个MQClientInstance对象,即当一个Java程序需要连接多个MQ集群时,必须手动指定不同的InstanceName。
武汉红喜's avatar
武汉红喜 已提交
24 25
- NameServer地址可以设定多个,用“;”分隔,多个NameServer之间彼此独立没有联系。为何不用ZooKeeper?ZooKeeper的功能很强大,包括自动
Master选举等,RocketMQ的架构设计决定了它不需要进行Master选举,用不到这些复杂的功能,只需要一个轻量级的元数据服务器就足够了。
武汉红喜's avatar
README  
武汉红喜 已提交
26 27

### More
28
- [RocketMQ架构模块解析](https://blog.csdn.net/javahongxi/article/details/72956608)
武汉红喜's avatar
武汉红喜 已提交
29
- [《RocketMQ实战与原理解析》](http://e.jd.com/30414640.html) `e.jd.com`