市面上MQ的产品较多,但结合物联网平台的使用场景,运维等因素,我们选型范围缩小到以下产品中: 1. 使用阿里云MQ 2. 使用自建RabbitMQ 3. 使用自建Kafka 一. 使用阿里云MQ 1. 优点: 省掉运维 有较高吞吐量 2. 缺点: 由于阿里云做了封装跟限制,不够灵活, 体现在: 1)需要各种阿里Keys ..

RabbitMQ 还是 Kafka 还是阿里云 MQ-----MQ 消息队列 选型

本贴最后更新于 251 天前,其中的信息可能已经时过境迁

市面上MQ的产品较多,但结合物联网平台的使用场景,运维等因素,我们选型范围缩小到以下产品中:

1.   使用阿里云MQ

2.   使用自建RabbitMQ

3.   使用自建Kafka

 

一.  使用阿里云MQ

       1. 优点:

                省掉运维

                有较高吞吐量

       2. 缺点:

              由于阿里云做了封装跟限制,不够灵活, 体现在:

                    1)需要各种阿里Keys

                    2)需要了解各种阿里自己的概念,比如Region

                    3)收费模式复杂,既要收topic,还有按流量

                    4) 只有铂金版支持比较高级的管理接口调用,比如创建Topic

               需要代码改动较多,体现在:

                     1)跟Springboot没有集成, github有个人提供的boot-start,但没法保证其是否稳定和持续改进

                     2)目前项目结构是基于Springboot的,集成阿里MQ,破坏了项目风格

                     3)Spring cloud Bus与阿里MQ没有集成,我们大部分项目集成了Spring Cloud Bus, 目前没法跟阿里MQ集成

               如果阿里MQ能满足无缝对接,可以再考虑阿里MQ

二. 使用自建RabbitMQ

      1. 优点:

                不需要代码改动

      2. 缺点:

                需要自己运维,搭建集群

                调优难度大,体现在:

                   1) RabbitMQ是基于erlang开发的,团队缺少erlang调优经验

                   2)自定义某些插件,开发难度大

                   3) 集群搭建难度高,伪集群

三. 使用自建Kafka

        

      1. 优点:

             不仅是一个强大的MQ, 还是一个强大的Storage, 还是一个强大的流处理Server

             集群基于ZK,搭建简单,易于扩展

             基于Scala开发,易于JVM层面调优

             Spring boot & Spring Cloud 跟Kafka有很好的集成

             QPS远超RabbitMQ

             物联网平台的以后必然会支持实时分析,Kafka在此领域已经等到业界认可

      2. 缺点:

              需要改代码,但改动不大

              需要自己运维

 

结论:使用自建Kafka

下表是引在阿里云消息队列比较的一个章节, 仅供参考

功能 消息队列RocketMQ Apache RocketMQ
(开源)
消息队列Kafka Apache Kafka
(开源)
RabbitMQ
(开源)
安全防护 支持 不支持 支持 不支持 不支持
主子账号支持 支持 不支持 支持 不支持 不支持
可靠性 - 同步刷盘 
- 同步双写 
- 超3份数据副本
- 99.99999999%
- 同步刷盘
- 异步刷盘
- 同步刷盘 
- 同步双写 
- 超3份数据副本
- 99.99999999%
异步刷盘,丢数据概率高 同步刷盘
可用性 - 非常好,99.95%
- Always Writable
- 非常好,99.95%
- Always Writable
横向扩展能力 - 支持平滑扩展
- 支持百万级 QPS
支持 - 支持平滑扩展
- 支持百万级 QPS
支持 - 集群扩容依赖前端
- LVS 负载均衡调度
Low Latency 支持 不支持 支持 不支持 不支持
消费模型 Push / Pull Push / Pull Push / Pull Pull Push / Pull
定时消息 支持(可精确到秒级) 支持(只支持18个固定 Level) 暂不支持 不支持 不支持
事务消息 支持 不支持 不支持 不支持 不支持
顺序消息 支持 支持 暂不支持 支持 不支持
全链路消息轨迹 支持 不支持 暂不支持 不支持 不支持
消息堆积能力 百亿级别
不影响性能
百亿级别
影响性能
百亿级别
不影响性能
影响性能 影响性能
消息堆积查询 支持 支持 支持 不支持 不支持
消息回溯 支持 支持 支持 不支持 不支持
消息重试 支持 支持 暂不支持 不支持 支持
死信队列 支持 支持 支持 不支持 支持
性能(常规) 非常好
百万级 QPS
非常好
十万级 QPS
非常好
百万级 QPS
非常好
百万级 QPS
一般
万级 QPS
性能(万级 Topic 场景) 非常好
百万级 QPS
非常好
十万级 QPS
非常好
百万级 QPS
性能(海量消息堆积场景) 非常好
百万级 QPS
非常好
十万级 QPS
非常好
百万级 QPS
1 回帖
请输入回帖内容...