精华内容
下载资源
问答
  • 常用消息中间件比较
    万次阅读
    2019-03-01 17:43:50

    一、 消息队列

      1. 分布式应用与集群的区别:

       如果是一个业务被拆分成多个子业务部署在不同的服务器上,那就是分布式应用;如果是同一个业务部署在多台服务器上,那就是集群。

      2. 系统间通信方式:

       一种是基于远程过程调用的方式(如RPC调用);另一种是基于消息队列的方式。

      3. 设计一个简单的消息队列:

       笔者自己搞了一个简单的消息队列,gitee地址如下:
       https://gitee.com/wxj1994/my-mq

    二、RabbitMQ

      1.RabbitMQ特点:

       RabbitMQ是一个由Erlang语言开发的基于AMQP标准的开源实现。RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。其具体特点包括:

    • 可靠性
    • 灵活的路由
    • 支持消息集群
    • 高可用性
    • 支持多种协议  (除支持AMQP协议之外,还通过插件的方式支持其他消息队列协议,如STOMP、MQTT)
    • 支持多语言客户端
    • 提供管理界面
    • 提供跟踪机制
    • 提供插件机制 (RabbitMQ提供了许多插件,也可以编写自己的插件)
      2. 总结:

       RabbitMQ最大的优势在于提供了比较灵活的消息路由策略、高可用性、可靠性以及丰富的插件、多种平台支持和完善的文档。不过,由于AMQP协议本身导致它的实现比较重量,从而使得与其他MQ (比如Kafka) 对比其吞吐量处于下风。

    三、ActiveMQ

      1.ActiveMQ 特点:

       ActiveMQ是由Apache出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。ActiveMQ实现了JMS 1.1 并提供了很多附加的特性,比如JMX管理、主从管理、消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化、消息队列监控等。主要特性如下:

    • 支持Java、C、C++、C#、Ruby、Perl、Python、PHP等多种语言的客户端和协议,如OpenWire、STOMP、AMQP、MQTT协议。
    • 提供了像消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化之类的高级特性。
    • 完全支持JMS 1.1 和 J2EE 1.4 规范 (包括持久化、分布式事务消息、事务)
    • 支持Spring框架,ActiveMQ 可以通过Spring 的配置文件方式很容易嵌入Spring应用中。
    • 通过了常见的J2EE服务器测试,比如TomEE、Geronimo、JBoss、GlassFish、WebLogic。
    • 连接方式多样化,ActiveMQ 提供了多种连接方式,例如 in-VM、TCP、SSL、NIO、UDP、多播、JGroups、JXTA。
    • 支持通过使用JDBC 和 Journal 实现消息的快速持久化。
    • 为高性能集群、客户端-服务器、点对点通信等场景而设计。
    • 提供了技术和语言中立的REST API 接口。
    • 支持以AJAX 方式调用 ActiveMQ。
    • ActiveMQ 可以轻松地与CXF、Axis 等 WebService 技术整合,以提供可靠的消息传递。
    • 可以作为内存中的JMS 提供者,非常适合 JMS 单元测试。

    四、Kafka

      1.Kafka 特点:

       Kafka 最早是由LinkedIn 公司开发的一种分布式的基于 发布/订阅 的消息系统,后来成为 Apache 的顶级项目。其主要特点如下:

    • 同时为发布和订阅提供高吞吐量。(Kafka 的设计目标是以时间复杂度为 O(1) 的方式提供消息持久化能力的,即使对TB级别以上数据也能保证常数时间的访问性能,即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条消息的传输)
    • 消息持久化。 (将消息持久化到磁盘,因此可用于批量消费,例如 ETL 以及实时应用程序。通过将数据持久化到硬盘以及复制可以防止数据丢失。)
    • 分布式。 (支持服务器间的消息分区及分布式消费,同时保证每个Partition 内的消息顺序传输。其内部的Producer、Broker 和 Consumer 都是分布式架构,这更易于向外扩展。)
    • 消费消息采用 Pull 模式。(消息被处理的状态是在 Consumer 端维护的,而不是由服务器端维护,Broker 无状态,Consumer 自己保存offet。)
    • 支持Online 和 Offline 场景,同时支持离线数据处理和实时数据处理。

    五、RocketMQ

      1.RocketMQ 特点:

       RocketMQ是阿里巴巴于2012年开源的分布式消息中间件,后来捐赠给 Apache软件基金会,并于2017年9月25日成为Apache的顶级项目。作为经历过多次阿里巴巴“双11” 这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延迟和高可靠等特性近年来被越来越多的国内企业所使用。其主要特点如下:

    • 具有灵活的可扩展性。 (RocketMQ 天然支持集群,其核心四大组件(NameServer、Broker、Producer、Consumer)的每一个都可以在没有单点故障的情况下进行水平扩展。)
    • 具有海量消息堆积能力。 (RocketMQ 采用零拷贝原理实现了超大量消息的堆积能力,据说单机已经可以支持亿级消息堆积,而且在堆积了这么多消息后依然保持写入低延迟)
    • 支持顺序消息。 (RocketMQ 可以保证消息消费者按照消息发送的顺序对消息进行消费。顺序消息分为全局有序消息和局部有序消息,一般推荐使用局部有序消息,即生产者通过将某一类消息按顺序发送至同一个队列中来实现。)
    • 支持多种消息过滤方式。 (消息过滤分为在服务器端过滤和在消费端过滤。在服务器端过滤时可以按照消息消费者的要求进行过滤,优点是减少了不必要的消息传输,缺点是增加了消息服务器的负担,实现相对复杂。消费端过滤则完全由具体应用自定义实现,这种方式更加灵活,缺点是很多无用的消息会被传输给消息消费者。)
    • 支持事务消息。 (RocketMQ 除支持普通消息、顺序消息之外,还支持事务消息,这个特性对于分布式事务来说提供了另一种解决思路。)
    • 支持回溯消费。 (回溯消费是指对于消费者已经消费成功的消息,由于业务需求需要重新消费。RocketMQ 支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯。)
    更多相关内容
  • 常用消息中间件比较

    千次阅读 2018-05-15 09:56:25
    ActiveMQJoramHornetQOpenMQMuleMQSonicMQRabbitMQZeroMQ关注度高中中中低低高中成熟度成熟比较成熟比较成熟比较成熟新产品无成功案例成熟成熟不成熟所属社区/公司ApacheOW2JbossSunMuleProgress社区活跃度高中中低...



    ActiveMQJoramHornetQOpenMQMuleMQSonicMQRabbitMQZeroMQ
    关注度
    成熟度成熟比较成熟比较成熟比较成熟新产品无成功案例成熟成熟不成熟
    所属社区/公司ApacheOW2JbossSunMuleProgress

    社区活跃度
    文档
    特点功能齐全,被大量开源项目使用
    在Linux平台上直接调用操作系统的AIO,性能得到很大的提升
    性能非常好,与MuleESB无缝整合性能优越的商业MQ由于Erlang语言的并发能力,性能很好低延时,高性能,最高43万条消息每秒
    授权方式开源开源开源开源商业商业开源开源
    开发语言JavaJavaJavaJavaJavaJavaErlangC
    支持的协议OpenWire、STOMP、REST、XMPP、AMQPJMSJMSJMSJMSJMSAMQPTCP、UDP
    客户端支持语言Java、C、C++、Python、PHP、Perl、.net等JavaJavaJavaJavaJava、C、C++、.netJava、C、C++、Python、PHP、Perl等python、java、php、.net等
    持久化内存、文件、数据库内存、文件内存、文件内存、文件内存、文件内存、文件、数据库内存、文件在消息发送端保存
    事务支持支持支持支持支持支持不支持不支持
    集群支持支持支持支持支持支持支持不支持
    负载均衡支持支持支持支持支持支持支持不支持
    管理界面一般
    一般一般一般
    部署方式独立、嵌入独立、嵌入独立、嵌入独立、嵌入独立独立独立独立
    评价成熟稳定,开源首选依赖容器,不适合跨语言调用推出的时间不长,尚无使用案例,不适合跨语言调用依赖容器,不适合跨语言调用推出的时间不长,无成功案例,目前仅支持Java成熟稳定Queue的数量大于50后,高并发下无法持续稳定的提供服务不支持事务、集群,并且消息不能在服务端持久化 

    展开全文
  • 常见消息中间件大 PK

    千次阅读 2021-12-13 17:08:53
    文章目录1. 几种协议1.1 JMS1.1.1 JMS 介绍1.1.2 JMS 模型1.1.3 JMS 实现1.2 AMQP1.2.1 AMQP 简介1.2.2 AMQP ...说到消息中间件,估计大伙多多少少都能讲出来一些,ActiveMQ、RabbitMQ、RocketMQ、Kafka 等等各种以及


    说到消息中间件,估计大伙多多少少都能讲出来一些,ActiveMQ、RabbitMQ、RocketMQ、Kafka 等等各种以及 JMS、AMQP 等各种协议,然而这些消息中间件各自都有什么特点,我们在开发中又该选择哪种呢?今天松哥就来和小伙伴们梳理一下。

    1. 几种协议

    先来说说消息中间件中常见的几个协议。

    1.1 JMS

    1.1.1 JMS 介绍

    先来说说 JMS。

    JMS 全称 Java Message Service,类似于 JDBC,不同于 JDBC,JMS 是 JavaEE 的消息服务接口,JMS 主要有两个版本:

    • 1.1
    • 2.0。

    两者相比,后者主要是简化了收发消息的代码。

    考虑到消息中间件是一个非常常用的工具,所以 JavaEE 为此制定了专门的规范 JMS。

    不过和 JDBC 一样,JMS 作为规范,他只是一套接口,并不包含具体的实现,如果我们要使用 JMS,那么一般还需要对应的实现,这就像使用 JDBC 需要对应的驱动一样。

    1.1.2 JMS 模型

    JMS 消息服务支持两种消息模型:

    • 点对点或队列模型
    • 发布/订阅模型

    在点对点或队列模型下,一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到对应的队列。这是一种点对点的消息模型,这种模式被概括为:

    1. 只有一个消费者将获得消息。
    2. 生产者不需要在消费者消费该消息期间处于运行状态,消费者也同样不需要在消息发送时处于运行状态,即消息的生产者和消费者是完全解耦的。
    3. 每一个成功处理的消息都由消息消费者签收。

    发布者/订阅者模型支持向一个特定的消息主题发布消息,消费者则可以定义自己感兴趣的主题,这是一种点对面的消息模型,这种模式可以被概括为:

    • 多个消费者可以消费消息。
    • 在发布者和订阅者之间存在时间依赖性,发布者需要创建一个订阅(subscription),以便客户能够订阅;订阅者必须保持在线状态以接收消息;当然,如果订阅者创建了持久的订阅,那么在订阅者未连接时,消息生产者发布的消息将会在订阅者重新连接时重新发布。

    1.1.3 JMS 实现

    开源的支持 JMS 的消息中间件有:

    • Kafka
    • Apache ActiveMQ
    • JBoss 社区的 HornetQ
    • Joram
    • Coridan 的 MantaRay
    • OpenJMS

    一些商用的支持 JMS 的消息中间件有:

    • WebLogic Server JMS
    • EMS
    • GigaSpaces
    • iBus
    • IONA JMS
    • IQManager(2005 年 8 月被Sun Microsystems并购)
    • JMS+
    • Nirvana
    • SonicMQ
    • WebSphere MQ

    这里有不少是松哥考古挖掘出来的,其实对于我们日常开发接触较多的,可能就是 Kafka 和 ActiveMQ。

    1.2 AMQP

    1.2.1 AMQP 简介

    另一个和消息中间件有关的协议就是 AMQP 了。

    Message Queue 的需求由来已久,80 年代最早在金融交易中,高盛等公司采用 Teknekron 公司的产品,当时的 Message Queue 软件叫做:the information bus(TIB)。 TIB 被电信和通讯公司采用,路透社收购了 Teknekron 公司。之后,IBM 开发了 MQSeries,微软开发了 Microsoft Message Queue(MSMQ)。这些商业 MQ 供应商的问题是厂商锁定,价格高昂。2001 年,Java Message Service 试图解决锁定和交互性的问题,但对应用来说反而更加麻烦了。

    于是 2004 年,摩根大通和 iMatrix 开始着手 Advanced Message Queuing Protocol (AMQP)开放标准的开发。2006 年,AMQP 规范发布。2007 年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。

    目前 RabbitMQ 的最新版本为 3.5.7,基于 AMQP 0-9-1。

    在 AMQP 协议中,消息收发涉及到如下一些概念:

    • Broker: 接收和分发消息的应用,我们日常所用的 RabbitMQ 就是一个 Message Broker。
    • Virtual host: 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 中创建 exchange/queue 等,这个松哥之前写过专门的文章,传送门:RabbitMQ 中的 VirtualHost 该如何理解
    • Connection: publisher/consumer 和 broker 之间的 TCP 连接,断开连接的操作只会在 client 端进行,Broker 不会断开连接,除非出现网络故障或 broker 服务出现问题。
    • Channel: 如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 Connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 Thread 创建单独的 Channel 进行通讯,AMQP method 包含了 Channel id 帮助客户端和 Message Broker 识别 Channel,所以 Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销,关于 Channel,松哥在RabbitMQ 管理页面该如何使用一文中也做过详细介绍。
    • Exchange: Message 到达 Broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。常用的类型有:direct (点对点), topic(发布订阅) 以及 fanout (广播)。
    • Queue: 消息最终被送到这里等待 Consumer 取走,一个 Message 可以被同时拷贝到多个 queue 中。
    • Binding: Exchange 和 Queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 Exchange 中的查询表中,作为 Message 的分发依据。

    1.2.2 AMQP 实现

    来看看实现了 AMQP 协议的一些具体的消息中间件产品都有哪些。

    • Apache Qpid
    • Apache ActiveMQ
    • RabbitMQ

    可能有小伙伴奇怪咋还有 ActiveMQ?其实 ActiveMQ 不仅支持 JMS,也支持 AMQP,这个松哥后面细说。

    另外还有大家熟知的阿里出品的 RocketMQ,这个是自定义了一套协议,社区也提供了 JMS,但是不太成熟,后面松哥细说。

    1.3 MQTT

    做物联网开发的小伙伴应该会经常接触这个协议,MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,目前看来算是物联网开发中比较重要的协议之一了,该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和 Actuator(比如通过 Twitter 让房屋联网)的通信协议,它的优点是格式简洁、占用带宽小、支持移动端通信、支持 PUSH、适用于嵌入式系统。

    1.4 XMPP

    XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是一个基于 XML 的协议,多用于即时消息(IM)以及在线现场探测,适用于服务器之间的准即时操作。核心是基于 XML 流传输,这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。 它的优点是通用公开、兼容性强、可扩展、安全性高,缺点是 XML 编码格式占用带宽大。

    1.5 JMS Vs AMQP

    对于我们 Java 工程师而言,大家日常接触较多的应该是 JMS 和 AMQP 协议,既然 JMS 和 AMQP 都是协议,那么两者有什么区别呢?来看下面一张图:

    这张图说的很清楚了,我就不啰嗦了。

    2. 重要产品

    2.1 ActiveMQ

    ActiveMQ 是 Apache 下的一个子项目,使用完全支持 JMS1.1 和 J2EE1.4 规范的 JMS Provider 实现,少量代码就可以高效地实现高级应用场景,并且支持可插拔的传输协议,如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports

    ActiveMQ 支持常用的多种语言客户端如 C++、Java、.Net,、Python、 Php、 Ruby 等。

    现在的 ActiveMQ 分为两个版本:

    • ActiveMQ Classic
    • ActiveMQ Artemis

    这里的 ActiveMQ Classic 就是原来的 ActiveMQ,而 ActiveMQ Artemis 是在 RedHat 捐赠的 HornetQ 服务器代码的基础上开发的,两者代码完全不同,后者支持 JMS2.0,使用基于 Netty 的异步 IO,大大提升了性能,更为神奇的是,后者不仅支持 JMS 协议,还支持 AMQP 协议、STOMP 以及 MQTT,可以说后者的玩法相当丰富。

    因此大家在使用时,建议直接选择 ActiveMQ Artemis。

    2.2 RabbitMQ

    RabbitMQ 算是 AMQP 体系下最为重要的产品了,它基于 Erlang 语言开发实现,估计很多人被 RabbitMQ 的安装折磨过,松哥建议安装 RabbitMQ 直接用 Docker,省心省力(公号后台回复 docker 有教程)。

    RabbitMQ 支持 AMQP、XMPP、SMTP、STOMP 等多种协议,功能强大,适用于企业级开发。

    来看一张 RabbitMQ 的结构图:

    关于 RabbitMQ,松哥最近发了十来篇教程了,这里就不再啰嗦了。

    2.3 RocketMQ

    RocketMQ 是阿里开源的一款分布式消息中间件,原名 Metaq,从 3.0 版本开始改名为 RocketMQ,是阿里参照 Kafka 设计思想使用 Java 语言实现的一套 MQ。RocketMQ 将阿里内部多款 MQ 产品(Notify、Metaq)进行整合,只维护核心功能,去除了所有其他运行时依赖,保证核心功能最简化,在此基础上配合阿里上述其他开源产品实现不同场景下 MQ 的架构,目前主要用于订单交易系统。

    RocketMQ 具有以下特点:

    • 保证严格的消息顺序。
    • 提供针对消息的过滤功能。
    • 提供丰富的消息拉取模式。
    • 高效的订阅者水平扩展能力。
    • 实时的消息订阅机制。
    • 亿级消息堆积能力

    对于 Java 工程师而言,这也是一种经常会用到的 MQ。

    2.4 Kafka

    Kafka 是 Apache 下的一个开源流处理平台,由 Scala 和 Java 编写。Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作(网页浏览,搜索和其他用户的行动)流数据。Kafka 的目的是通过 Hadoop 的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

    Kafka 具有以下特性:

    • 快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化。
    • 高吞吐:在一台普通的服务器上既可以达到 10W/s 的吞吐速率。
    • 高堆积:支持 topic 下消费者较长时间离线,消息堆积量大。
    • 完全的分布式系统:Broker、Producer、Consumer 都原生自动支持分布式,通过 Zookeeper 可以自动实现更加复杂的负载均衡。
    • 支持 Hadoop 数据并行加载。

    大数据开发中大家可能会经常接触 Kafka,Java 开发中也会接触,但是相对来说可能接触的少一些。

    2.5 ZeroMQ

    ZeroMQ 号称最快的消息队列系统,它专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常使用,偏重于实时数据通信场景。ZeroMQ 不是单独的服务,而是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的 API,应用程序通过加载库文件,调用 API 函数来实现高性能网络通信。

    ZeroMQ 的特性:

    • 无锁的队列模型:对于跨线程间的交互(用户端和 session)之间的数据交换通道 pipe,采用无锁的队列算法 CAS,在 pipe 的两端注册有异步事件,在读或者写消息到 pipe 时,会自动触发读写事件。
    • 批量处理的算法:对于批量的消息,进行了适应性的优化,可以批量的接收和发送消息。
    • 多核下的线程绑定,无须 CPU 切换:区别于传统的多线程并发模式,信号量或者临界区,ZeroMQ 充分利用多核的优势,每个核绑定运行一个工作者线程,避免多线程之间的 CPU 切换开销。

    2.6 其他

    另外还有如 Redis 也能做消息队列,松哥之前也发过文章和大家介绍用 Redis 做普通消息队列和延迟消息队列,这里也就不啰嗦了。

    3. 比较

    最后,我们再来通过一张图来比较下各个消息中间件。

    小伙伴们在公众号后台回复 mqpkmq,可以获取这个 Excel 表格链接。

    好啦,就扯这么多。

    展开全文
  • 常见消息中间件对比

    千次阅读 2021-11-16 16:50:13
    号称大数据的杀手锏,谈到大数据领域内的消息传输,则绕不开Kafka,这款为大数据而生的消息中间件,以其百万级TPS的吞吐量名声大噪,迅速成为大数据领域的宠儿,在数据采集、传输、存储的过程中发挥着举足.

    在这里插入图片描述

    1.ActiveMQ

    优点

    1. 单机吞吐量:万级
    2. topic数量都吞吐量的影响:
    3. 时效性:ms级
    4. 可用性:高,基于主从架构实现高可用性
    5. 消息可靠性:有较低的概率丢失数据
    6. 功能支持:MQ领域的功能极其完备

    缺点:
    官方社区现在对ActiveMQ 5.x维护越来越少,较少在大规模吞吐的场景中使用。

    2.Kafka

    号称大数据的杀手锏,谈到大数据领域内的消息传输,则绕不开Kafka,这款为大数据而生的消息中间件,以其百万级TPS的吞吐量名声大噪,迅速成为大数据领域的宠儿,在数据采集、传输、存储的过程中发挥着举足轻重的作用。

    Apache Kafka它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log),之后成为Apache项目的一部分。
    目前已经被LinkedIn,Uber, Twitter, Netflix等大公司所采纳。

    优点

    1. 性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高。
    2. 时效性:ms级
    3. 可用性:非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用
    4. 消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;
    5. 有优秀的第三方Kafka Web管理界面Kafka-Manager;
    6. 在日志领域比较成熟,被多家公司和多个开源项目使用;
    7. 功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用

    缺点:

    1. Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长
    2. 使用短轮询方式,实时性取决于轮询间隔时间;
    3. 消费失败不支持重试;
    4. 支持消息顺序,但是一台代理宕机后,就会产生消息乱序;
    5. 社区更新较慢;

    RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。

    3.RabbitMQ优点:

    优点

    1. 由于erlang语言的特性,mq 性能较好,高并发;
    2. 吞吐量到万级,MQ功能比较完备
    3. 健壮、稳定、易用、跨平台、支持多种语言、文档齐全;
    4. 开源提供的管理界面非常棒,用起来很好用
    5. 社区活跃度高;

    RabbitMQ缺点:

    1. erlang开发,很难去看懂源码,基本职能依赖于开源社区的快速维护和修复bug,不利于做二次开发和维护。
    2. RabbitMQ确实吞吐量会低一些,这是因为他做的实现机制比较重。
    3. 需要学习比较复杂的接口和协议,学习和维护成本较高。

    4.RocketMQ

    RocketMQ出自 阿里公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进。

    RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。

    RocketMQ优点:

    1. 单机吞吐量:十万级
    2. 可用性:非常高,分布式架构
    3. 消息可靠性:经过参数优化配置,消息可以做到0丢失
    4. 功能支持:MQ功能较为完善,还是分布式的,扩展性好
    5. 支持10亿级别的消息堆积,不会因为堆积导致性能下降
    6. 源码是java,我们可以自己阅读源码,定制自己公司的MQ,可以掌控

    RocketMQ缺点:

    1. 支持的客户端语言不多,目前是java及c++,其中c++不成熟;
    2. 社区活跃度一般
    3. 没有在 mq 核心中去实现JMS等接口,有些系统要迁移需要修改大量代码

    消息队列选择建议

    1.Kafka

    Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。

    大型公司建议可以选用,如果有日志采集功能,肯定是首选kafka了。

    2.RocketMQ

    天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。

    RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQ。

    3.RabbitMQ

    RabbitMQ :结合erlang语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。不过,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug。

    如果你的数据量没有那么大,小公司优先选择功能比较完备的RabbitMQ。

    以上,是Kafka、RocketMQ、RabbitMQ的优劣势比较。

    展开全文
  • 常用消息中间件选择

    千次阅读 2022-02-27 17:20:47
    文章目录一、ActiveMQ二、RabbitMQ三、RocketMQ四、Kafka五、ZeroMQ六、主要消息中间件比较 有哪些主流的消息中间件? 当前业界比较流行的开源消息中间件包括:ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等。 ...
  • 目前市面上有很多消息中间件:RabbitMQ,RocketMQ,Kafka等等… 1.2 什么是RabbitMQ RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和...
  • 消息中间件简介 消息中间件的使用场景 消息中间件的产生背景、特点和常用协议 常用消息中间件介绍(RabbitMQ、Kafka 、RocketMQ、ActiveMQ) 常用消息中间件的对比 常用消息中间件,如何技术选型?
  • 消息中间件概念与常用中间件选型

    千次阅读 2021-11-22 21:15:42
    消息中间件就是在通信的上下游之间截断:break it,Broker 然后利用中间件解耦、异步的特性,构建弹性、可靠、稳定的系统。 异步处理、流量削峰、限流、缓冲、排队、最终一致性、消息驱动等需求的场景都可以使用...
  • 最近在研究一些消息中间件常用的MQ如RabbitMQ,ActiveMQ,Kafka等。NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。官方和第三方还为NSQ开发了...
  • RPC常用消息中间件

    千次阅读 2019-09-01 22:40:38
    一、消息中间件 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行...
  • 常见的几种消息中间件

    千次阅读 2020-05-15 14:41:20
    当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。 1、消息中间件的组成 1.1 Broker 消息服务器,作为server提供消息核心服务1.2 Producer 消息生产...
  • RabbitMQ 消息中间件

    2021-01-09 13:21:46
    削峰 :消息队列中的常用场景,一般在秒杀或抢够活动中使用广泛。一般会因为流量过大,应用系统配置承载不了这股瞬间流量,导致系统直接挂掉,即传说中的“宕机”现象。为解决这个问题,我们会将那股巨大的流量拒在...
  • 消息中间件常用协议

    千次阅读 2021-12-10 12:32:24
    消息中间件常用协议
  • Kafka是大数据常用消息中间件,是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和重复的日志服务。它的模型大概就是这个样子 我们可以看到两个熟悉的角色 Producer生产者 Consumer消费者 这两个...
  • 消息中间件常用的jar集合,淘宝优秀消息队列jar包集合,MQ,fqueue,netty,log4j,
  • 常用的几种消息队列中间件对比

    千次阅读 2020-06-19 18:12:12
    当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ...RabbitMQ于2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 主要特性 可靠性:提供了多种
  • 常用的Java中间件

    千次阅读 2021-11-07 21:52:08
    2. 消息队列中间件 这个主要解决的是应用之间的消息传递、解耦、异步的问题。它是一种EDA架构。也就是通过在低耦合的模块之间传输事件消息来完成模块之间的合作。在很多大型的网站当中,消息队列采用发
  • 一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息...
  • 消息中间件有哪些?

    千次阅读 2021-03-26 12:10:17
    消息中间件有:1、Kafka主要为高吞吐量的订阅发布系统而设计,追求速度与持久化;2、RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现;3、RocketMQ是纯Java开发,具有高吞吐量。消息中间件有:...
  • ActiveMQ消息中间件

    2020-11-13 11:19:29
    ActiveMQ消息中间件是一种在分布式系统中应用程序借以传递消息的媒介。常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。
  • 当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。 本文主要探讨主流的消息队列MQ比较,特征,以及典型使用场景。 目前主流的...
  • 互联网公司常用四大类中间件之搜索中间件与缓存中间件 1. 搜索中间件:Solr,ELK(ElasticSearch,Logstash,Kibana)达成近实时搜索。...Redis缓存常用方法大家都比较清楚: Ehcached:轻量级Java缓存框架
  • 消息中间件消息队列)介绍

    千次阅读 2022-02-27 17:19:08
    文章目录一、概述二、消息中间件的组成三、消息中间件模式分类3.1、点对点(PTP)模式3.2、发布订阅(Pub/Sub)模式3.3、小结四、消息中间件的...、日志采集4.5、消息通讯五、消息中间件的优点六、消息中间件常用协议...
  • 分布式消息中间件设计
  • 各大主流消息中间件

    万次阅读 2020-08-25 15:32:03
    在了解消息中间件之前,首先了解两个基本概念Message和Queue。 Message :消息消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 Queue:消息...
  • 消息中间件简介

    2021-06-15 21:12:18
    消息中间件(MQ)的定义 其实并没有标准定义,一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布 式系统中的其余各个子系统进行集成。 几个关键词: ...
  • 中间件是什么,常用中间件有哪些

    千次阅读 2022-04-26 22:57:05
    一、中间件是什么? 中间件(英语:Middleware)顾名思义是系统软件和用户应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,是一种独立的系统软件或服务程序,分布式...
  • 常用消息中间件(ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka)的对比 一、资料文档 Kafka:中。有kafka作者自己写的书,网上资料也有一些。 RabbitMQ:多。有一些不错的书,网上资料多。 ZeroMQ:少。没有专门写...
  • 中间件是将具体业务和底层逻辑解耦的软件,分为:MOM(消息中间件)、RPC(远程过程调用中间件)、UDA(数据访问中间件)、TPM(交易中间件)等。消息中间件,又称为消息队列、消息队列中间件,分为Rabb...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,232
精华内容 39,292
热门标签
关键字:

常用消息中间件比较