主流的消息队列

简介

目前市面上主流开源的消息队列主要RabbitMQ、RockectMQ、Kafka、ActiveMQ。这四种消息队列都是比较常见,下面我们从各个维度比较他们有缺点。

ActiveMQ

ActiveMQ作为"老古董",市面上用的已经不多。
社区: Apache
开发语言: Java
协议支持: 支持多种协议,包括REST,AMQP,XMPP等
客户端支持的语言: 基本支持Java
单机支持的吞吐量: 万级
消息延时: 毫秒级
消息可靠性: 低概率丢失
优势: 非常成熟,功能强大
劣势: 消息有丢失情况,社区活跃度低
应用场景: 主要用于解耦和异步,较少在大规模吞吐中使用

RabbitMQ

社区: Rabbit
开发语言: Erlang
协议支持: AMQP
客户端支持的语言: 基本支持Java
单机支持的吞吐量: 万级
消息延时: 微秒级
消息可靠性: -
优势: 性能极好,延时低,MQ功能完,管理界面非常好,社区活跃,互联网公司用的比较多
劣势: 由于追求性能,吞吐量低,erlang语言开发不容易定制开发,集群动态扩展麻烦
应用场景: 都有使用

RocketMQ

社区: 阿里
开发语言: Java
协议支持: 自定义
客户端支持的语言: 基本支持Java
单机支持的吞吐量: 十万级
消息延时: 毫秒级
消息可靠性: 结果配置,可以做到零丢失
可用性: 非常高,分布式架构
优势: MQ功能完备,分布式扩展性好,API简单,吞吐量大,分布式扩展方便,社区活跃
劣势: 不是标准的JMS接口,迁移不方便,技术有被抛弃风险
应用场景: 大规模吞吐量,复杂业务中

Kafka

社区: Apache
开发语言: Java&Scala
协议支持: 自定义
客户端支持的语言: 基本支持Java
单机支持的吞吐量: 十万级
消息延时: 毫秒级以内
消息可靠性: 结果配置,可以做到零丢失
可用性: 非常高,分布式架构,一个数据多个副本
优势: 超高吞吐量,ms的延时,极高的可用性和可靠性。分布式扩展方便
劣势: 有可能进行消息的重复消费
应用场景: 大数据实时计算,日志采集中被大规模使用,是业界的标准

总结

选择中间件的可以从这些维度来考虑:可靠性,性能,功能,可运维行,可拓展性,社区活跃度。目前常用的几个中间件,ActiveMQ作为"老古董",市面上用的已经不多,其它几种:

  • RabbitMQ:
    优点:轻量,迅捷,容易部署和使用,拥有灵活的路由配置
    缺点:性能和吞吐量不太理想,不易进行二次开发
  • RocketMQ:
    优点:性能好,高吞吐量,稳定可靠,有活跃的中文社区
    缺点:兼容性上不是太好
  • Kafka:
    优点:拥有强大的性能及吞吐量,兼容性很好
    缺点:由于"攒一波再处理"导致延迟比较高
相关推荐
码农飞哥14 小时前
RocketMQ消费接口设计实战:为什么HTTP回调接口必须吞掉所有异常,始终返回成功?
网络协议·http·中间件·消息队列·rocketmq
小小工匠4 天前
Redis - 缓存与数据库一致性:问题分析与解决方案
redis·缓存·性能优化·消息队列·并发
闪电悠米4 天前
黑马点评-Redis 消息队列-01_why_redis_mq
java·数据库·spring boot·redis·缓存·junit·消息队列
Fcy6484 天前
Linux下 进程间通信详解(二)System V IPC
linux·运维·消息队列·共享内存·信号量·system v
Tenifs10 天前
深入对比分析 RabbitMQ、RocketMQ 和 Kafka
后端·kafka·消息队列·rabbitmq·rocketmq·爱编程的阿彬
小楼v11 天前
Kafka消息队列安装步骤及从0入门到基础核心掌握
java·kafka·消息队列·教程·安装
Andy Dennis12 天前
nsq学习记录
消息队列·go·nsq
愤怒的苹果ext13 天前
Spring Boot Redis Stream队列
spring boot·redis·消息队列·stream
better_liang16 天前
每日Java面试场景题知识点之-分布式秒杀系统的设计
java·redis·分布式·消息队列·高并发·秒杀系统·限流降级
better_liang16 天前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq