RocketMQ详解(1)——RocketMQ简介与环境搭建
一. RocketMQ简介
- RocketMQ是一款分布式的、队列模型的消息中间件,由Alibaba研发,借鉴参考了JMS规范的MQ实现,更参考了优秀的开源消息中间件Kafka,并且结合Alibaba实际的业务需求,在天猫双十一场景实现了业务削峰、分布式事务等功能的优秀框架。目前(截止2018.9.5)开源稳定版本为4.2.0,最新版本为4.4.0。
- Github地址:https://github.com/apache/rocketmq
- 其代码结构清晰优秀,底层采用Netty框架进行NIO通信。
- 内部使用轻量级的NameServer进行服务发现和动态路由,提高了服务性能,并且支持消息失败重试机制。
- 天然地支持集群模式、消费者负载均衡广播消费等特性、水平扩展能力很强、吞吐量大。
- 采用零拷贝的原理、顺序写盘,支持亿级消息堆积能力。
- 提供丰富的消息机制,如顺序消息、事务消息、延迟消息等。
二. RocketMQ的优势
- 能够严格保证消息顺序。
- 提供丰富的消息拉取模式。
- 高效的订阅者水平扩展能力。
- 实时消息订阅机制。
- 亿级消息堆积能力。
- 事务消息,支持分布式事务。
三. 选择RocketMQ的理由
- 天生支持集群模式,无单点故障问题,任意一点高可用,并支持水平扩展。
- 海量消息的堆积能力,并且消息堆积后,写入低延迟。
- 支持上万数量的队列。
- 支持消息失败重试机制。
- 消息可查询。
- 开源社区活跃。
- 经历多次双十一考验,成熟度较高。
四. 环境搭建
RocketMQ 4.x版本之后,环境的搭建方式与以前有了较大的不同,具体的方式可以参考官网:http://rocketmq.apache.org/docs/quick-start/,里面有详细的介绍。环境需要JDK1.8以上和Maven3.2以上版本。这里介绍本人在搭建环境时遇到的坑:
启动NameServer或Broker时报错:There is insufficient memory for the Java Runtime Environment to continue
原因是RocketMQ在启动NameServer或Broker时,或分配较大的内存,如果生产机内存较小,则无法正常启动。解决方式很简单,直接修改配置即可。找到runserver.sh和runbroker.sh启动脚本,将虚拟机内存参数改为:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
重新启动即可