什么是消息队列
消息队列是分布式系统中重要的组件
- 主要拥有解决应用耦合、异步消息、流量削峰、日志处理、消息通讯
- 可实现高性能、高可用、可伸缩、最终一致性架构
目前主流的消息队列
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 是业内标准的