【架构师面试-消息队列-7】-常见消息队列产品使用场景与优缺点对比

1:四者消息产品对比

特性

ActiveMQ

RabbitMQ

RocketMQ

Kafka

公司/社区

Apache

Rabbit

阿里

Apache

开发语言

Java

Erlang

Java

Java&Scala

协议支持

OpenWire、

STOMP、

REST,XMPP,AMQP

AMQP、

XMPP、

SMTP、

STOMP

自定义 

自定义协议,社区封装

了http协议支持

单机吞吐量

万级(最差)

万级(其次) 

十万级(最好)

十万级(次之)

Topic数量

&吞吐量

topic 可以达到几

百/几千的级别,吞吐量会有较小幅度的下降,这是RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic

topic 从几十到几百个时候,吞吐量会大幅度下降,在同等机器下,Kafka 尽量保证 topic数量不要过多,如果要支撑大规模的 topic,需要增加更多的机器资源

消息延迟

毫秒级

微秒级,这

是RabbitMQ

的一大特点,延迟最低

毫秒级

毫秒级以内

可用性

高,基于主从架构实现高可用

同ActiveMQ

非常高,分布式架构

非常高,分布式,一个数据多个副本,少数机

器宕机,不会丢失数据,不会导致不可用

消息可靠性

有较低的概率丢失数据

可靠性高

经过参数优化配

置,可以做到 0 丢失

同 RocketMQ

功能支持

MQ 领域的功能极其完备

基于erlang 开

发,并发能力很强,性能极好,

时很低

MQ 功能较为完

善,还是分布式

的,扩展性好

功能较为简单,主要支持简单的MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用

2:ActiveMQ

一般的业务系统要引入 MQ,最早大家都用 ActiveMQ ,但是现在确实大家用的不多了( 特别是互联网公司 ),没经过大规模吞吐量场景的验证( 性能较差 ),社区也不是很活跃( 主要精力在研发 ActiveMQApollo ),所以大家还是算了,不推荐用。

3:RabbitMQ【建议】

后来大家开始用 RabbitMQ,但是确实 Erlang 语言阻止了大量的 Java 工程师去深入研究和掌控它,对公司而言,几乎处于不可控的状态,但是确实人家是开源的,比较稳定的支持,社区活跃度也高。

Spring Cloud 在消息队列的支持上,对 RabbitMQ 是比较不错的,所以在选型上又更加被推崇。

4:RocketMQ

不过现在确实越来越多的公司,会去用 RocketMQ,确实很不错(阿里出品)。目前已经加入 Apache,所以社区层面有相应的保证,并且是使用 Java 语言进行实现,对于 Java 工程师更容易去深入研究和掌控它。目前,也是比较推荐去选择的。并且,如果使用阿里云,可以直接使用其云服务。

5:Kafka

使用场景更多与大数据相关,例如spark和flink

6:总结

1:中小型公司

技术实力较为一般,技术挑战不是特别高,用 RabbitMQ 是不错的选择

中小型公司使用 RocketMQ 也是没什么问题的选择,特别是以 Java 为主语言的公司。

2:大型公司

基础架构研发实力较强,用 RocketMQ 是很好的选择。

3:如果是大数据领域的实时计算、日志采集等场景

用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这

个领域的事实性规范。

目前国内也是有非常多的公司,将 Kafka 应用在业务系统中,例如唯品会、陆金所、美团等

等。

上一篇:rocketmq优雅停机往事


下一篇:RocketMQ (四) 使用RocketMQ原生API收发消息