消息队列
选型
消息队列业界主流的有Kafka、RabbitMQ、activeMQ、rocketMQ
Name | 单机吞吐量 | 消息可靠性 | 持久化能力 | 可用性 | 核心特点 | 备注 |
---|---|---|---|---|---|---|
ActiveMQ | 万级,吞吐量比RocketMQ和Kafka要低一个数量级 | 有较低的概率丢失数据 | 内存、文件、数据库 | 基于主从架构实现高可用 | MQ领域的功能及其完备 | 非常成熟,功能强大,在业内大量公司以及项目都有应用。 但是偶尔消息丢失的概率,并且现在社区以及国内应用都越来越少,官方社区对ActiveMQ5.X维护越来越少,而且确实主要是基于解耦和异步来用的,较少在大规模吞吐场景中使用 |
RabbitMQ | 万级,吞吐量比RocketMQ和Kafka要低一个数量级 | 消息不丢失 | 内存、文件。支持数据堆积,但数据堆积反过来影响生产效率 | 高,基于主从架构实现高可用 | 基于Erlang开发,所以并发能力强,性能及其好,延时很低 | erlang语言开发的,性能及其好,延时很低。而且开源的版本,就提供的管理界面非常棒。缺点就是吞吐量会低一些,且因为使用erlang开发,针对源码的定制非常困难,只能依赖于开源社区的维护。 |
RocketMQ | 10万级,RocketMQ也是可以支撑高吞吐的一种MQ | 经过参数优化配置,可以做到0丢失 | 磁盘文件 | 非常高,分布式架构 | MQ功能较为完善,还是分布式的,扩展性好 | 接口简单易用,在阿里大规模应用过,日处理消息上 百亿之多,可以做到大规模吞吐,性能也非常好,分布式扩展也很方便,社区维护还可以,可靠性和可用性都是OK的,还可以支撑大规模的topic数量,支持复杂MQ业务场景。 |
Kafka | 10万级1这是kafka最大的优点,就是吞吐量高。一般配置和数据类的系统进行实时数据计算、日志采集等场景 | 经过参数优化配置可以做到0丢失 | 磁盘文件,只要磁盘容量够,可以做到无限消息堆积 | 非常高,kafka是分布式的,一个数据多个副本,少数机器宕机后,不会丢失数据,不会导致不可用 | 功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用,是实时上的标准。 | 仅仅提供较少的核心功能,但是提供超高的吞吐量,ms级别的延迟,极高的可用性以及可靠性,分布式可以任意扩展。 同时kafka最好是支撑较少的topic数量即可,保证其超高的吞吐量。 |
kafka:起初是由LinkedIn公司采用Scala语言开发的一个分布式、多分区、多副本且基于zookeeper协调的分布式消息系统,现已捐献给Apache基金会。它是一种高吞吐量的分布式发布订阅消息系统,以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark、Flink等都支持与Kafka集成,可为之后大数据分析做技术&数据积累。
- 提供完全分布式架构, 并有replica机制, 拥有较高的可用性和可靠性, 理论上支持消息无限堆积;
- 支持批量操作;
- 消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;
- 有优秀的第三方Kafka Web管理界面Kafka-Manager;
- 在日志领域比较成熟,被多家公司和多个开源项目使用;
上次更新: 2025/03/09, 15:45:50