主流的消息队列

简介

目前市面上主流开源的消息队列主要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:
    优点:拥有强大的性能及吞吐量,兼容性很好
    缺点:由于"攒一波再处理"导致延迟比较高
相关推荐
神威难绷泪2 天前
Linux消息队列 & 共享内存 笔记
linux·消息队列·共享内存
pnoker4 天前
IoT DC3 消息总线:六适配器可插拔设计
物联网·架构·kafka·消息队列·rabbitmq
祖力554 天前
进程间通信(IPC机制):消息队列与共享内存
linux·消息队列·共享内存·通信·进程间通信
Logintern0917 天前
Celery 的底层架构正是进程池、事件循环、epoll 和协程全部组合在了一起
python·架构·消息队列·进程·celery·事件循环
会编程的土豆18 天前
12306 春运抢票:数据一致性怎么保证
redis·消息队列·go·高并发
阿里云云原生21 天前
8.28 上海见丨AI 实时数据沙龙报名中
消息队列
JavaDog程序狗22 天前
【Pulsar】四种消费模式怎么选
消息队列
AI人工智能+电脑小能手1 个月前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
AI人工智能+电脑小能手1 个月前
【大白话说Java面试题 第191题】【08_Kafka篇】第7题:消息队列的优缺点
java·消息队列·系统设计·分布式架构·技术选型
AI人工智能+电脑小能手1 个月前
【大白话说Java面试题 第190题】【08_Kafka篇】第6题:消息队列有什么作用?
java·kafka·消息队列·系统设计·分布式架构