消息队列大作战

作者: 黄靠谱 | 来源:发表于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不是一个量级的

相关文章

  • 消息队列大作战

    消息队列大作战 参考:http://rocketmq.apache.org/docs/motivation/ 概述...

  • 消息队列:消息队列简介

    1. 什么是消息队列 消息队列(message queue),是一种应用程序的通信方法; 消息队列是 生产者-消费...

  • 消息中间件

    消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是 JVM 内实现的队列实现...

  • 消息队列对比

    引用: 常用消息队列对比消息队列及常见消息队列介绍 常用消息队列 1. RabbitMQ 用erlang语言开发的...

  • 消息队列应用-使用异步队列就解耦了吗

    消息队列作用一文介绍了为什么要使用消息队列。我们再来讨论下如何有效使用消息队列。 消息队列模式 目前主流消息队列主...

  • Kafka常见问题解决

    概要:我们使用消息队列,就需要知道为什么要用消息队列,什么场景需要用消息队列,使用消息队列能带来哪些好处和消息队列...

  • 进程间通信(下)

    消息队列 在UNP第二卷中详细介绍了两种消息队列:Posix消息队列和System V消息队列。这两种消息队列很相...

  • APUE读书笔记-15进程内部通信(6)

    7、消息队列 消息队列是存放在内核中的消息的链表,通过消息队列标识进行标记。我们把消息队列称为队列,把它的标识称为...

  • java消息机制

    1.什么是消息队列? 1.消息队列是一个队列,先进先出,你无法读取消息队列中间的消息,只能按照顺序,从消息队列的头...

  • springboot项目架构(4)activemq、rabbit

    消息队列实现 支持的消息队列 ActiveMq RabbitMq RocketMq Kafka 各个队列实现队列与...

网友评论

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

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