消息队列大作战

作者: 黄靠谱 | 来源:发表于2019-02-20 19:04 被阅读79次

    消息队列大作战

    参考:
    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,无注册中心的消息传递模式

    区别

    image
    image
    1. ActiveMQ集群架构:外部注册中心+持久,而RocketMQ内置nameServer实现注册中心、路由管理

    2. ActiveMQ是一主N从,而RocketMQ是支持灵活的一主、一主N从、多主、多主多从(支持多路的写,性能更高)

    3. ActiveMQ集群的消息复制是同步进行的(Slave复制成功之后,Master才commit,再Ack给客户端)(但是刷盘是支持异步发送的),而RocketMQ的消息存储既支持同步也支持异步

    4. ActiveMQ只有Master和Client建立连接,但是RocketMQ Master和Slave都可以和Client连接,一般会选一个节点。一般来讲,直接和Master交互会节省很多成本。

    5. ActiveMQ里面的Topic和Queue是两个独立的概念,Queue意味着消息只会被一个消费者消费,Topic表示广播订阅,所有订阅了该Topic的consumer都会接收到。rocketmq里面设置consumer.setMessageModel(MessageModel.BROADCASTING);就是广播订阅模式了;

    6. RocketMQ的模型是这样的:一个Topic下默认分配4个Queue,每个Queue是一个FIFO的Message队列,而Message又可以根据业务上贴上不同的Tag

    7. ActiveMQ简单暴力,Queue和Topic平等的关系,Topic表示广播订阅,Queue表示集群订阅,Queue只有1个。如果要实现顺序消息的话,消费者设置exclusive=true属性,那么该Consumer会独占这个Queue,从而确保消息有序。从设计上来看,AcitveMQ的并发性和RocketMQ不是一个量级的

    相关文章

      网友评论

        本文标题:消息队列大作战

        本文链接:https://www.haomeiwen.com/subject/kxfkyqtx.html