主流消息中间件对比

作者: HmilyMing | 来源:发表于2019-01-18 12:56 被阅读1次

    本次主要对比:ActiveMQ、kafka、RocketMQ、RabbitMQ

    衡量消息中间件的指标:服务性能,数据存储,集群架构

    1.ActiveMQ

    ActiveMQ是Apache出品的,最流行的能力,强劲的开源消息总线,并且他完全支持Java的JMs规范。丰富的API,多种集群构建模式使得它成为业界老牌的消息中间件,在中小型企业应用广泛。但是相比于kafka,rabbitmq等MQ来说,性能太弱,在如今的高并发,大数据处理的场景下显得力不从心,经常会出现一些小问题,消息延迟,堆积,堵塞等,不过其多种集群架构是优势。

    如下所示主要的两种集群架构


    image

    ActiveMQ的两种集群架构
    master-slave模式:通过zk确立一个主节点,主节点对外提供服务,从节点不对外提供服务。当主节点不可用,另外一个节点就转成主节点,对外提供服务,已达到高可用的目的。

    network模式就相当于两组master-slave组合在一起。

    2.kafka

    kafka是linkedin开源的分布式发布-订阅消息系统,目前归属于Apache的顶级项目。主要特点是基于pull模式来处理消息消费,追求高吞吐量,一开始的目的是日志的收集和传输。0.8版本开始支持复制,不支持事务,对消息的丢失,重复,错误没有严格要求 适用于产生大量数据的互联网服务的数据收集业务。在廉价的服务器上都能有很高的性能,这个主要是基于操作系统底层的pagecache,不用内存胜似使用内存。


    image

    Kafka集群
    Kafka集群也是采用zk进行集群,当一个数据存放在一个节点中,会通过relicate同步到其他节点,所以我们不需要更多的关注kafka有可能丢失消息,因为其他节点会有这份数据,除非你这个地区的kafka都挂了。可靠性高的场景不适用。

    3.RocketMQ

    RocketMQ是阿里开源的,目前是也是Apache的顶级项目,纯Java开发,具有高吞吐量,高可用,适合大规模分布式系统应用的特点。其思路起源于kafka,它对消息的可靠传输以及事务性做了优化,目前在阿里被广泛应用于交易/充值/流计算/消息推送/日志流式处理/Binglog分发等场景。不过其维护是一个痛点。不过它能保证消息的顺序性,集群模式也丰富,在双十一等高并发场景承受上亿访问,三大指标都很好,但是它的商业版要收费!!!


    image

    RocketMQ集群
    它刚开始也是依赖zk做集群的,但是觉得太慢就自己开发了Name Server。

    4.RabbitMQ

    RabbitMQ是使用erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息/队列/路由(包括点对点的发布/订阅)可靠性,安全。AMQP协议更多用在企业系统内,对数据一致性/稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。rabbitMQ的可靠性很高,性能比不上kafka,但是也很高了,集群模式也有多种。


    image

    总结:各有各的好处,应该结合实际业务场景来选择采用何种MQ。

    相关文章

      网友评论

        本文标题:主流消息中间件对比

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