文章目录
一、消息队列简介
1.1 消息队列是什么
消息队列就是存储消息的队列;英文名为 Message Queue,经常缩写为 MQ。
1.2 消息队列中间件
用来存储消息的软件(组件)。目前市面上的消息队列又很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ等。
1.3 消息队列应用场景
1.3.1 异步处理
某些网站的新用户注册,除了要将用户信息保存到数据库,还需要发送短信通知和邮件通知,而短信通知和邮件通知需要连接额外的服务器,需要额外的等待时间;但是如果使用消息队列,就可以进行异步处理,实现快速响应
1.3.2 系统解耦
某用户在电商网站下单,会先请求订单系统保存订单信息,然后请求库存系统减少库存,如果库存系统挂了或者接口更改,都会导致下单失败;使用消息队列,使订单系统不再调用库存系统,而是订单系统把消息写入消息队列,然后库存系统从消息队列中拉取消息进行处理,从而实现系统解耦。
1.3.3 流量削峰
某些网站有秒杀活动,每秒有10W请求,而数据库吞吐量只有8000,用户请求一瞬间就可以打挂数据库;而使用消息队列后,可以先将用户请求放入消息队列,然后相关业务程序再拉取信息进行处理,就可以进行流量削峰
1.3.4 日志处理
某些大型网站需要根据用户的访问行为来推荐相关信息,所以需要在页面上收集大量的用户访问信息。使用消息队列存临时储这些信息,再配合实时处理系统,就可以快速得出结果
1.4 生产者-消费者模型
消息队列使用的 **生产者-消费者模型**。生产者生产信息并将其放入消息队列中,消费者从消息队列中获取并消费信息。
1.5 消息队列的两种模式
消息队列中有两种模式,分别是:①点对点模式;②发布订阅模式。其中发布订阅模式还有推(push)和拉(poll)两种。
1.5.1 点对点模式

概念
- Producer 和 Consumer 是一对一的,生产者将消息发送到消息队列中,然后生产者从消息队列中获取并消费消息。
特点
- 消息被消费后就会被清除(即使 MQ 支持多个消费者,但每个消息也只会被被消费一次);
- 消费者在接收消息之后,需要向消息队列发出应答,以便消息队列删除消息。
1.5.2 发布订阅模式

概念
- Producer 将消息发送到消息队列的 Topic 中,订阅该 Topic 的所有 Consumer 都可以消费这条消息
特点
- 多个消费者消费一个消息
- 消息被消费后不会被删除
- 有主题(Topic)的概念,消费者需要订阅主题后才可以进行消费
| 推模式(push) | 拉模式(pull) | |
|---|---|---|
| 概念 | MQ 主动将消息推送给对应的 Consumer | Consumer 主动地从 MQ 中拉取消息 |
| 特点 | 消息队列记录所有的消息状态,若消息被标记为已消费,则 Consumer 不能再对其进行消费 | Consumer 自己记录消费状态,每个 Consumer 互相独立地拉取消息。 |
| 优点 | 延迟小,基本可以做到实时 | 可以根据自己的能力拉取消息并处理 |
| 缺点 | 因为发送消息的速度由 MQ 决定,所以难以适应消费速度不同的 Consumer;如果发送速度过快,Consumer 可能来不及消费,导致拒绝服务。 | 如果消息队列中没有数据,会导致 Consumer 陷入循环中 |

二、Kafka 简介
2.1 Kafka 简介
Kafka 是一个分布式的、基于发布订阅模式的消息队列,主要应用于大数据实时处理领域。
2.2 Kafka基本组成
1、Producer:生产者,即向Kafka发送消息的客户端
2、Consumer:消费者,从 Kafka 拉取消息并消费的客户端
3、Consumer Group(CG):由多个 Consumer 组成的消费者组;消费者组是逻辑上的订阅者,所有消费者都属于某个CG;CG 内每个 Consumer 负责不同的 Partition,一个 Partition 不能被同个 CG 中的多个 Consumer 消费,可被不同 CG 中 Consumer 消费(CG 之间互不影响)
4、Broker:一个集群由多个 Broker 组成,一台 Kafka 服务器就是一个 Broker
5、Topic:可以理解为一个队列,主要是对消息进行分类,不同种类的消息可以放到不同的 Topic 中;Producer 和 Consumer 都是面向 Topic 的
6、Partition:一个 Topic 可以分布到多个 Broker 上,具体的就是 Partition,每个 Partition 是一个有序队列
7、Replica:指副本;Topic 中的 每个 Partition 都有若干个副本,有一个 Leader 和若干个 Follower;当集群中的某个节点发生故障时,Replica 可以保证该 Broker 的 Partition 数据不丢失
8、Leader:每个 Partition 中多个副本的“主”;Producer 生产数据和 Consumer 消费数据的对象
9、Follower:每个 Partition 中多个副本的“从”;从 Leader 同步数据,当 Leader 发生故障时,某个 Follower 会成为新的 Leader