主流消息队列有哪些?
大家好,我是【架构摆渡人】,一只十年的程序猿。这是消息队列的第一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。
ActiveMQ
ActiveMQ是一个很老的消息队列了,我也只是在很老的一些系统里面见过它。无论是性能还是功能方面,确实没有跟上时代的节奏,社区也不活跃。大家可以去看看,在Github上的关注也就2K的数量。
对Java开发者来说,它最大的有点就是用Java开发的,阅读源码比较方便,其他就没啥优点了,所以也不建议大家现在用ActiveMQ来实现业务。
主页:https://github.com/apache/activemq
RabbitMQ
RabbitMQ使用的还是比较多的,至少在目前很多公司里也都在使用它。也有一定的社区活跃度,而且目前也一直在不断地更新优化。在Github上的关注已经达到了9.4K的数量,比ActiveMQ高了几倍。
对Java开发者来说,它最大的缺点就是开发语言不是Java,而是采用Erlang语言编写,阅读源码不是很方便。
主页:https://github.com/rabbitmq
Kafka
Kafka我相信大家就算没用过,也应该听说过。比如ELK中的K就是Kafka,在日志收集场景基本上都是用Kafka,因为有Kafka的强大吞吐量和完整的生态圈。Kafka的社区活跃度非常高,在Github上的关注已经达到了21.7K的数量,可见使用的范围多广。
对Java开发者来说,Kafka的源码阅读起来也是比较方便的,Kafka是Scala语言开发。
主页:https://github.com/apache/kafka
RocketMQ
RocketMQ是阿里开源的一款消息队列,目前已入驻Apache。RocketMQ的性能和稳定性肯定没得说,毕竟经历过阿里整个双十一大促的洗礼。我一直也都是在用RocketMQ,但是用的是云服务,省去了部署维护等一系列问题,非常方便,就是费用多点。
RocketMQ的社区也是相当的活跃,关注度也很高,在Github上的关注已经达到了17K的数量。对Java开发者来说,RocketMQ是最方便我们学习的一款消息队列,因为它是Java开发的,所以源码阅读起来会比较方便。
主页:https://github.com/apache/rocketmq
选型建议
前面只是给大家列了一下目前一些在用的消息队列,每款消息队列都有自己独特的设计和更适合的使用场景。如果是Java开发者,要在项目中使用消息队列,我会建议大家用RocketMQ和Kafka。
如果是要收集日志或者是业务数据的埋点上报,可以用Kafka。用Kafka的原因在于Kafka性能好,吞吐量高,单机吞吐量能够在10万级以上。
同时Kafka的生态也比较全,当你收集的日志想要写入ES中,Kafka Connector就能够快速支持。跟各种其他框架都能够快速对接。
其次,日志收集类的对时延的要求没有那么高,为了提高性能,Kafka发送消息的时候并不是每有一条就直接发送的,而是会采用批处理的方式一起发送,这样能够提高性能,所以时延相对来说会有点高,但是对应并发量足够大的系统,其实还好,基本上毫秒级别就可以产生万级以上的消息了。
如果是业务类的场景,比如电商场景,那么建议使用RocketMQ。RocketMQ的性能也很好,单机吞吐量也能够达到10万级。而且RocketMQ还有丰富的消息类型来支撑多变的业务场景,比如顺序消息,延迟消息,事务消息等。在线业务对于时延也会比较敏感,所以RocketMQ适合在线业务场景。
日志类的,大数据类的都会有专门的岗位去负责,对于我们业务开发的同学来说,只需要关注业务层面要用的中间件即可,所以RocketMQ我们是必须要去学习和使用的,而且面试中也经常会问。
原创:架构摆渡人(公众号ID:jiagoubaiduren),欢迎分享,转载请保留出处。
本文已收录至学习网站 http://cxytiandi.com/ ,里面有Spring Boot, Spring Cloud,分库分表,微服务,面试等相关内容。