ActiveMQ
非常成熟,功能强大,在也内大量的公司以及项目中都有应用<br><br>偶尔会有较低概率丢失消息<br><br>而且现在社区以及国内应用都越来越少,官方社区现在对 activemq 5.x 维护越来越少<br><br>主要是基于解耦和异步来用的,较少在大规模吞吐的场景中使用
Kafka
kafak 的特点其实很明显,就是仅仅提供较少的核心功能,但是提供超高的吞吐量,ms 级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展<br><br>同时 kafka 最好是支撑较少的 topic 数量即可,保证其超高吞吐量<br><br>而且 kafka 唯一的一点劣势是有可能消息重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略<br><br>这个特性天然适合大数据实时计算以及日志收集
RabbitMQ
erlang 语言开发,性能及其好,延时很低;<br><br>吞吐量到万级,MQ 功能比较完备<br><br>而且开源提供的管理界面非常棒,用起来很好用<br><br>社区相对比较活跃,几乎每个月都会发几个版本<br><br>但是问题也是显而易见的,rabbitmq 确实吞吐量会第一下,这是因为他做的实现机制比较重<br><br>而且 erlang 开发,国内有几个公司有实力做儿郎源码级别的研究和定制?如果说你没这个还顺利的话,确实偶尔会有一些问题,你很难去看懂源码,你公司对这个东西的掌控很柔,基本职能依赖于开源社区的快速维护和修复 bug<br><br>而且 rabbitmq 集群动态扩展会很麻烦。
RocketMQ
接口简单易用,而且毕竟在阿里大规模应用过,有阿里品牌保障<br><br>如处理消息上百亿之多,可以做到大规模吞吐,性能也非常好,分布式扩展也很方便,社区维护还可以,可靠性和可用性都是 ok 的,还可以支撑大规模的 topic 数量,支持复杂 mq 业务场景<br><br>而且又一个很大的优势在于,阿里出品都是 java 系的,我们可以自己阅读源码,定制自己公司的 mq,可以掌控<br><br>社区活跃度想对一般,不过也还可以,文档相对来说简单一些,然后接口这块不是按照标准 JMS 规范走的有些系统要迁移需要修改大量代码<br><br>还有就是阿里出台的技术,你得做好这个技术万一被抛弃,社区黄掉的风险,那如果你们那公司有技术实力我觉得用 rocketmq 挺好的