消息队列的优缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?

一、概述

一个产品的出现,通常都有其优缺点,辩证看待,方可明白其适合的应用场景。

二、消息队列的优缺点

消息队列的优点:前面已经讲述了消息队列的优点,请看文章“为什么要使用消息队列”。

消息队列的缺点:

    系统可用性降低:记得之前大学无偿献血的时候,献血后爱心站会用无偿献血者爱心礼包,其中就包含一个工具盒,里面包含日常家用维修的各种工具,这个工具的可用性很好。如果其中一个工具使用坏了,还可以继续用其他很多的工具,不至于就不要了。然而,在MQ队列中,A之前依赖的BCD,现在A只依赖于MQ,看上去请求响应效率变高了,但如果MQ挂掉了,整个系统也会崩溃,因此系统的可用性变低了。

   系统复杂度提高:加个 MQ 进来,你如何保证系统没被重复消费?如何保证系统的可靠性传输?怎么保证消息传递的顺序性?

   系统一致性问题:A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,系统就出现就数据一致性问题。

三、各个中间件的使用场景

对于MQ,最早大家使用ActiveMQ,现在ActiveMQ社区活跃度不是很高。中小型公司,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ 是不错的选择;大型公司,基础架构研发实力较强,用 RocketMQ 是很好的选择。大数据领域的实时计算、日志采集等场景使用Kafka。



你可能感兴趣的:(消息队列的优缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?)