MQ 的应用场景:

  1. 第一个应用就是商品秒杀以及产品抢购等使用场景
  2. 使用 MQ 实现消息通讯,实现实时通讯功能
  3. 使用 MQ 实现日志系统

常用的 MQ 中间件有 RabbitMQ、Kafka 和 Redis 等,其中 Redis 属于轻量级的消息队列,而 RabbitMQ、Kafka 属于比较成熟且比较稳定和高效的 MQ 中间件

MQ 的特点:

  1. 先进先出
  2. 发布、订阅工作模式
  3. 持久化
  4. 分布式
  5. 消息确认

引入 MQ 系统会带来的问题

  1. 增加了系统的运行风险。如果 MQ 系统挂掉的话可能会导致整个业务系统瘫痪。
  2. 增加了系统的复杂度。引入 MQ 系统后,需要考虑消息丢失、消息重复消费、消息的顺序消费等问题。

redis

优点

redis 是一种轻量级的消息中间件。

业务不复杂的场景下可以尝试性的使用Redis提供的消息队列

缺点

Redis 5.0 之前,是不支持消息确认的。

通过 List 数据类型的 lpush 和 rpop 方法来实现队列消息的存入和读取功能,或者使用 Redis 提供的发布订阅(pub/sub)功能来实现消息队列,但这种模式不支持持久化

Redis 5.0 之后提供了新的数据类型 Stream 解决了消息确认的问题,它同样不能提供复杂的路由匹配规则。

RabbitMQ

分布式情况下,至少需要一个磁盘节点,内存节点不做限制。

优点

保证数据不丢失。

RabbitMQ 支持拉取数据模式和主动推送数据的模式,也就说 RabbitMQ 服务器会主动把消息推送给订阅的消费者;

RabbitMQ 支持多租户的功能

缺点

RabbitMQ 并不支持消息回溯;

RabbitMQ 是没有幂等性功能支持的

Kafka

Kafka 是 LinkedIn 公司开发的基于 ZooKeeper 的多分区、多副本的分布式消息系统

JAVA面试题之五——消息队列对比,RabbitMQ还是Kafka?_消息中间件

优点

1、Kafka 支持消息回溯,它可以根据 Offset(消息偏移量)、TimeStamp(时间戳)等维度进行消息回溯;

2、Kafka 的消息消费是基于拉取数据的模式,也就是消费者主动向服务器端发送拉取消息请求;

3、在相同配置下,Kafka 的吞吐量通常会比 RabbitMQ 高一到两个级别,比如在单机模式下,RabbitMQ 的吞吐量大概是万级别的处理能力,而 Kafka 则可以到达十万甚至是百万的吞吐级别;

4、Kafka 用户多,社区活跃;

此外,Kafka 从 0.11 版本就开始支持幂等性了

缺点

  1. Kafka 并不支持多租户的功能;
  2. 需要依赖Zookeeper进行数据管理。