主流消息队列有哪些?

大家好,我是【架构摆渡人】,一只十年的程序猿。这是消息队列的第一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。

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,分库分表,微服务,面试等相关内容。

posted @ 2022-04-23 16:23  架构摆渡人  阅读(354)  评论(0编辑  收藏  举报