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

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

市面上 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 回帖   
请输入回帖内容...