Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?

2022年05月15日 阅读数:5
这篇文章主要向大家介绍Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

正如其余面试题,问到“Redis和Memcached之间的区别?”或者“Dubbo和Spring Cloud之间的区别?” 同样,相同领域技术之间进行比较也是一个常常面试的考点!git

一方面,考察了你对当前技术的了解程度,他适应的场景和不适应的场景,摸清楚你是否真正的用过,是否有“最佳实践”。你说你对技术了解的比较深刻,问了几个比较有难度的问题,你都游刃有余,可是问到你为何使用这个,而不是用另一个,你却回答不上来,那老板还安心让你作技术选型吗?还能给你一个小组长或者架构师的职位吗?github

另外一方面,考察了你对技术的广度。不少小伙伴在简历中我的评价的时候,经常会写到对技术热爱,喜欢新技术啥的,结果相同领域的技术,只知道一个,而对其余的不知道,面试官还能认为你对技术热爱,比较有追求的激情吗?面试

-------------------------------------------------------------------------------apache

针对本小节要说的消息队列,既然你用了 MQ,多是某一种 MQ,那么你当时作没作过调研?架构

你别傻乎乎的本身拍脑壳看我的喜爱就瞎用了一个 MQ,好比 Kafka,甚至都从没调研过业界流行的 MQ 到底有哪几种。每个 MQ 的优势和缺点是什么。每个 MQ 没有绝对的好坏,可是就是看用在哪一个场景能够扬长避短,利用其优点,规避其劣势。并发

若是是一个不考虑技术选型的候选人招进了团队,leader 交给他一个任务,去设计个什么系统,他在里面用一些技术,可能都没考虑过选型,最后选的技术可能并不必定合适,同样是留坑。分布式

特性性能

ActiveMQ大数据

RabbitMQ优化

RocketMQ

Kafka

单机吞吐量

万级,比 RocketMQ、Kafka 低一个数量级

同 ActiveMQ

10 万级,支撑高吞吐

10 万级,高吞吐,通常配合大数据类的系统来进行实时数据计算、日志采集等场景

topic 数量对吞吐量的影响

 

 

topic 能够达到几百/几千的级别,吞吐量会有较小幅度的降低,这是 RocketMQ 的一大优点,在同等机器下,能够支撑大量的 topic

topic 从几十到几百个时候,吞吐量会大幅度降低,在同等机器下,Kafka 尽可能保证 topic 数量不要过多,若是要支撑大规模的 topic,须要增长更多的机器资源

时效性

ms 级

微秒级,这是 RabbitMQ 的一大特色,延迟最低

ms 级

延迟在 ms 级之内

可用性

高,基于主从架构实现高可用

同 ActiveMQ

很是高,分布式架构

很是高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会致使不可用

消息可靠性

有较低的几率丢失数据

基本不丢

通过参数优化配置,能够作到 0 丢失

同 RocketMQ

功能支持

MQ 领域的功能极其完备

基于 erlang 开发,并发能力很强,性能极好,延时很低

MQ 功能较为完善,仍是分布式的,扩展性好

功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用

综上,各类对比以后,有以下建议:

通常的业务系统要引入 MQ,最先你们都用 ActiveMQ,可是如今确实你们用的很少了,没通过大规模吞吐量场景的验证,社区也不是很活跃,因此你们仍是算了吧,我我的不推荐用这个了;

后来你们开始用 RabbitMQ,可是确实 erlang 语言阻止了大量的 Java 工程师去深刻研究和掌控它,对公司而言,几乎处于不可控的状态,可是确实人家是开源的,比较稳定的支持,活跃度也高;

不过如今确实愈来愈多的公司会去用 RocketMQ,确实很不错,毕竟是阿里出品,但社区可能有忽然黄掉的风险(目前 RocketMQ 已捐给 Apache,但 GitHub 上的活跃度其实不算高)对本身公司技术实力有绝对自信的,推荐用 RocketMQ,不然回去老老实实用 RabbitMQ 吧,人家有活跃的开源社区,绝对不会黄。

因此中小型公司,技术实力较为通常,技术挑战不是特别高,用 RabbitMQ 是不错的选择;大型公司,基础架构研发实力较强,用 RocketMQ 是很好的选择。

若是是大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,况且几乎是全世界这个领域的事实性规范。