ActiveMQ、RabbitMQ、RocketMQ、Kafka之间的对比需要从性能、持久化、语言支持、综合角度进行阐述。
1.性能
ActiveMQ支持单机6000左右并发,RabbitMQ支持单机12000左右并发,RocketMQ支持单机10W左右并发,而Kafka是并发性能最好的,号称单机100W并发。
2.持久化
数据持久化层面三者都支持,RocketMQ、Kafka是天生支持的,而ActiveMQ、RabbitMQ开启持久化后性能会下降。
3.多语言支持
在语言支持方面,ActiveMQ、RabbitMQ、Kafka主流语言都支持,而RocketMQ是Java语言实现的,只支持Java。
4.综合层面
- ActiveMQ:如果公司业务场景简单,且系统比较老的情况,可以考虑使用ActiveMQ,但缺点也很明显,缺乏大规模应用,且并发量达到一定程度时会存在数据不一致问题,一般情况下不推荐使用。
- RabbitMQ:RabbitMQ显著的优点是高可用,由erlang语言提供支持,宕机的故障率比较低,同时它的管理界面优秀。缺点是内部机制很难去了解(erlang语言),另外集群不支持动态扩展,无法通过增加机器来提升并发性能。
- RocketMQ:优点是模型简单(生产者、消费者、主题),不像RabbitMQ基于AMQP协议,同时接口易用,另外RocketMQ在阿里大规模运用,性能比较好,功能上提供了定时消息、死信消息、事务消息的处理。缺点是只支持Java,如果公司是多语言开发就不推荐使用。
- Kafka:优点是天生分布式,性能是最好的,同时对大数据友好支持。缺点是运维难度大,需要对它的配置文件、运行原理、ack机制都要熟悉,同时它对带宽有一定的要求。kafka早期比较适用于日志的收集。