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 应用在业务系统中,例如唯品会、陆金所、美团等
等。