一、介绍
RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,具有高性能、高可靠、高实时、分布式特点。是阿里参考Kafka特点研发的一个队列模型的消息中间件,早期开源2.x版本名为MetaQ;15年迭代3.x版本,更名为RocketMQ,16年开始贡献到Apache,经过1年多的孵化,最终成为Apache顶级的开源项目。
应用中,使用RocketMQ的目的:异步/解耦/削峰
二、架构
详情:https://github.com/apache/rocketmq/blob/master/docs/cn/architecture.md
三、特性
1、高性能
其性能主要依赖于天然的分布式Topic/Queue
2、高可靠
RocketMQ支持消息的高可靠,影响消息可靠性的几种情况:
- Broker非正常关闭
- Broker异常Crash
- OS Crash
- 机器掉电,但是能立即恢复供电情况
- 机器无法开机(可能是cpu、主板、内存等关键设备损坏)
- 磁盘设备损坏
1)、2)、3)、4) 四种情况都属于硬件资源可立即恢复情况,RocketMQ在这四种情况下能保证消息不丢,或者丢失少量数据(依赖刷盘方式是同步还是异步)。
5)、6)属于单点故障,且无法恢复,一旦发生,在此单点上的消息全部丢失。RocketMQ在这两种情况下,通过异步复制,可保证99%的消息不丢,但是仍然会有极少量的消息可能丢失。通过同步双写技术可以完全避免单点,同步双写势必会影响性能,适合对消息可靠性要求极高的场合,例如与钱相关的应用。注:RocketMQ从3.0版本开始支持同步双写。
更多特性:https://github.com/apache/rocketmq/blob/master/docs/cn/features.md
我的手稿笔记:
官网中文文档:https://github.com/apache/rocketmq/tree/master/docs/cn