【消息队列】如何做技术选型?

什么是消息队列

消息队列是分布式系统中重要的组件

  • 主要拥有解决应用耦合、异步消息、流量削峰、日志处理、消息通讯
  • 可实现高性能、高可用、可伸缩、最终一致性架构

目前主流的消息队列

Kafka
RabbitMQ
RocketMQ ,老版本是 MetaQ 。
ActiveMQ ,目前用的人越来越少了。

优缺点对比

特性 ActiveMQ RabbitMQ RocketMQ Kafka
单击吞吐量 万级 万级 十万级 10 万级
消息可靠性 有较低的概率丢失数据 经过参数优化配置,可以做到 0 丢失 经过参数优化配置,可以做到 0 丢失 经过参数优化配置,可以做到 0 丢失
可用性 高可用,主从 高可用,镜像同步 非常高,分布式架构 非常高,分布式架构
延迟 ms 级 微秒级 ms 级 ms 级
功能支持 完备 基于 erlang 开发,并发能力很强,性能极好,延时很低 MQ 功能较为完善,还是分布式的,扩展性好 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用

ActiveMQ

早起覆盖率较高,目前社区已经不活跃了,而且性能比较差。不推荐使用

RabbitMQ

优点
开源免费,比较稳定的支持,社区活跃度也高

缺点
RabbitMQ可以实现延迟队列,但是对RabbitMQ的依赖比较高,一旦切换技术栈无法使用

RocketMQ

优点
Java 语言进行实现,更容易去深入研究和掌控它,中文社区活跃

性能稳定

缺点
国产消息队列,与国外的生态圈对接较差

Kafka

优点
使用Scala和Java开发,与周围生态圈兼容性最好,大数据和流计算领域应用广泛

缺点
异步批量操作设计,同步收发消息方面响应延迟高

拓展—Redis

redis也可以做消息队列,使用list,rpush入队,lpop出队,在业务比较小的时候选择redis做消息队列也是不错的选择

总结

中小型公司,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ 是不错的选择,业务比较简单的也可以使用redis

大型公司,基础架构研发实力较强,用 RocketMQ 是很好的选择

大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的

你可能感兴趣的:(#,MQ)