MQ如何选型

1.需求分析

1.功能需求:除了最基本生产消费模型,还需要MQ能支持REQUEST-REPLY模型,以提供对同步调用的支持此外,如果MQ能提供PUBLISH-SUBSCRIBE模型,则事件代理的实现可以更加简单

2.性能需求:考虑未来一到两年内产品的发展,消息队列的呑吐量预计不会超过 1W qps,但由单条消息延迟要求较高,希望尽量的短

3.可用性需求:因为是在线服务,因此需要较高的可用性,但充许有少量消息丢失

4.易用性需求:包括学习成本、初期的开发部署成本、日常的运维成本等

2.横向对比

特性 ActiveMQ RabbitMQ Kafka RocketMQ
PRODUCER-COMSUMER 支持 支持 支持 支持
PUBLISH-SUBSCRIBE 支持 支持 支持 支持
REQUEST-REPLY 支持 支持 - 支持
API完备性 低(静态配置)
多语言支持 支持,JAVA优先 语言无关 支持,JAVA优先 支持
单机呑吐量 万级 万级 十万级 单机万级
消息延迟 毫秒级 微秒级 毫秒级 毫秒级
可用性 高(主从) 高(主从) 很高(分布式) 非常高(分布式)
消息丢失 - 理论上不会丢失 理论上不会丢失
消息重复 - 可控制 理论上会有重复 允许重复
文档的完备性
提供快速入门
首次部署难度 -

个人建议:

  • 技术一般,可以考虑用 RabbitMQ
  • 基础架构研发实力较强,用 RocketMQ 是很好的选择
  • 实时计算、日志采集:使用 kafka

3.如何选型

MQ 描述
RabbitMQ erlang开发,对消息堆积的支持并不好,当大量消息积压的时候,会导致 RabbitMQ 的性能急剧下降,每秒钟可以处理几万到十几万条消息。
RocketMQ java开发,面向互联网集群化功能丰富,对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应,每秒钟大概能处理几十万条消息。
Kafka Scala开发,面向日志功能丰富,性能最高,当你的业务场景中,每秒钟消息数量没有那么多的时候,Kafka 的时延反而会比较高,所以,Kafka 不太适合在线业务场景。
ActiveMQ java开发,简单,稳定,性能不如前面三个,小型系统用也ok,但是不推荐,推荐用互联网主流的。

猜你喜欢

转载自blog.csdn.net/weixin_44702984/article/details/131616209
今日推荐