Kafka 简介


一、消息队列简介

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 主动将消息推送给对应的 ConsumerConsumer 主动地从 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


参考文章


版权声明:本文为qq_36965149原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。