消息队列大作战
参考:
http://rocketmq.apache.org/docs/motivation/
概述
主流的消息中间件:ActiveMQ、RabbitMQ、RocketMQ、Kafka。另外Redis也可以做MQ用(集群订阅和广播订阅都支持)
最大的优点:
-
ActiveMQ 功能多,灵活,老牌Apache项目,特色是消息持久化支持多种形式(KAHADB、LevelDB、Mysql)。吞吐量和消息可靠性一般。java编写,Apach出品。Push的模式
-
RocketMQ 消息的可靠性最强(事务消息、堆积能力强)同时高吞吐,适合订单类的项目。阿里出品,支持两种不同的Pull模式
-
Kafka 吞吐量最大,适用于大数据领域,比如日志收集,Pull模式,LinkedIn开源的,scala编写
-
RabbitMQ: Erlang编写的,功能强大,性能也不错。中小型公司用不错。
ActiveMQ
- Broker集群架构依赖第三方插件:注册中心直接用zookeeper,持久化工具LevelDB集群
- 消息的持久化支持多种形式:Mysql存储、KahaDB、LevelDB(谷歌开源的KV持久化数据库,但是速度仍然很快)等等第三方工具
- 我们项目ActiveMQ,单节点,异步发送(无需等待ACM持久化确认即可返回),异步读取(监听回调式),KahaDB做持久化,使用一个queue,无注册中心的消息传递模式
区别


-
ActiveMQ集群架构:外部注册中心+持久,而RocketMQ内置nameServer实现注册中心、路由管理
-
ActiveMQ是一主N从,而RocketMQ是支持灵活的一主、一主N从、多主、多主多从(支持多路的写,性能更高)
-
ActiveMQ集群的消息复制是同步进行的(Slave复制成功之后,Master才commit,再Ack给客户端)(但是刷盘是支持异步发送的),而RocketMQ的消息存储既支持同步也支持异步
-
ActiveMQ只有Master和Client建立连接,但是RocketMQ Master和Slave都可以和Client连接,一般会选一个节点。一般来讲,直接和Master交互会节省很多成本。
-
ActiveMQ里面的Topic和Queue是两个独立的概念,Queue意味着消息只会被一个消费者消费,Topic表示广播订阅,所有订阅了该Topic的consumer都会接收到。rocketmq里面设置consumer.setMessageModel(MessageModel.BROADCASTING);就是广播订阅模式了;
-
RocketMQ的模型是这样的:一个Topic下默认分配4个Queue,每个Queue是一个FIFO的Message队列,而Message又可以根据业务上贴上不同的Tag
-
ActiveMQ简单暴力,Queue和Topic平等的关系,Topic表示广播订阅,Queue表示集群订阅,Queue只有1个。如果要实现顺序消息的话,消费者设置exclusive=true属性,那么该Consumer会独占这个Queue,从而确保消息有序。从设计上来看,AcitveMQ的并发性和RocketMQ不是一个量级的
网友评论