Apache RocketMQ™是一个开源的分布式消息和流数据平台。php
一、既然是消息系统,最核心的功能就是要提供消息的发布与订阅功能,最简单的概念模型以下:java
可是rocketmq提供的能力会比这个复杂的多,如一个生产方发布消息,须要多个消费方订阅,也会存在多个生产方生产消息,一个消费方消费消息,出现一对多,多对一的状况。c++
上图就是扩展了producer、consumer和Topic的概念模型,rocketmq最核心的概念就是Tpoic,producer和consumer都是围绕Topic展开,每一个broker下能够有多个topic,topic下又能够有很对队列messageQueue,相同的topic又能够分布在不一样broker节点下,producer发送消息会轮训的发送到topic的队列下;相同consumer分组是负载均衡订阅消息,不一样的consumer分组之间互不干扰,即便广播订阅消息;同一Topic下的每一个队列只能被相同分组下的一个consumer订阅消费,但一个consumer能够消费多个队列。web
二、总体部署架构图编程
三、消息的存储模型架构
rocketmq的消息存储与消费队列是分开的,消息被存储在commitLog下,而后再异步构建消费队列messageQueue,消费队列并不存储真正的消息内容,只是存储消息在commitLog下的偏移量、消息的长度和消息的tag的hashcode。如图所示:负载均衡
这样设计有如下优点:异步
但也存在如下缺点:分布式
四、rocketmq具备如下特色工具
与其余消息队列系统的一个对好比下:
消息产品 | 支持客户端 | 协议和规范 | 顺序消息 | 定时消息 | 批量消息 | 广播消息 | 消息过滤 | 消息回溯 | 消息优先级 | 高可用和故障切换 | 消息追踪 | 配置 | 管理和操做工具 | Server Triggered Redelivery | 消息存储 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ActiveMQ | java,c++,php,net | 推模型,支持 OpenWire, STOMP, AMQP, MQTT, JMS | 独占消费和消息分组支持顺序 | 支持 | 不支持 | 支持 | 支持 | 支持 | 支持 | 支持,leveldb+zookeeper | 不支持 | 默认配置是低级别的,用户须要优化配置参数 | 支持 | 不支持 | 支持JDBC,leveldb,kahadb |
Kafka | java,scala | 拉模型, 支持TCP | 分区内消息有顺序 | 不支持 | 支持异步生产者 | 不支持 | 支持 | 支持 | 不支持 | 支持,依赖zookeeper | 不支持 | Kafka使用键值对格式进行配置。这些值能够经过文件提供,也能够经过编程方式提供 | 支持,使用命令行 | 不支持 | 高性能文件存储 |
RocketMQ | java,c++,go | 拉模型, 支持TCP, JMS, OpenMessaging | 确保消息的严格顺序,并能够优雅地扩展 | 支持 | 支持同步模式,以免消息丢失 | 支持 | 支持 | 支持按时间和偏移量 | 不支持 | 支持主从模式 | 支持 | 开箱即用,用户只需注意一些配置 | 支持,命令行和web客户端 | 支持 | 高性能和低延迟的文件存储 |