【Kafka学习-1】Kafka相关概念

消息队列

概念

消息队列,英文名:Message Queue,经常缩写为MQ。从字面上来理解,消息队列是一种用来存储消息的队列。我们可以简单理解消息队列就是将需要传输的数据存放在队列中

应用场景

异步处理

电商网站中,新的用户注册时,需要将用户的信息保存到数据库中,同时还需要额外发送注册的邮件通知、以及短信注册码给用户。但因为发送邮件、发送注册短信需要连接外部的服务器,需要额外等待一段时间,此时,就可以使用消息队列来进行异步处理,从而实现快速响应。

系统解耦 

流量削峰

生产者、消费者模型

生产者:负责生产消息放到消息队列中。

消费者:负责处理消息队列中的消息。

Kafka的两种模式

点对点模式

流程

  1. 生产者生产消息,把消息发送到消息队列。
  2. 消费者消费消息队列中的消息,收到消息之后,告诉消息队列收到消息了。
  3. 消息队列把消息删除。

特点

  1.  每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中)
  2.  发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
  3.  接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;

发布/订阅模式

该模式下生产者可以给不同的Topic发送消息,消费者也可以只消费特定Topic的消息,相比于点对点模式更加灵活。

流程

  1. 生产者向特定的主题Topic,发送消息到消息队列。
  2. 订阅了该Topic的消费者消费消息。

特点

  1. 可以有多个topic主题
  2. 消费者消费数据之后,不删除数据
  3. 每个消费者相互独立,都可以消费到数据

Kafka的基础架构

假设现在生产者需要将100T数据,发送到一个Topic的消息队列中,这显然是不现实的,因为一般服务器都存储不了100T的数据。

因此,kafka采用了分而治之的思想,将该一个Topic划分成几个Partition(分区),每个分区的消息交给一个broker(一个broker就是一台服务器)来存储,将100T的数据“平分”给每个broker的分区来存储。

虽然分区解决了Topic消息的存储问题,但是三个分区的消息,让一个消费者来消费,肯定也是处理不过来的。因此配合Topic分区的设计,顺势也提出了消费者组的概念。

消费者组由多个消费者组成,一个消费者组只处理一个Topic,一个Topic分区只能由组内的一个消费者来消费。

为了系统的可用性,kafka的还会为每个分区进行“备份”副本,而这个副本是保存在另一个broker里的。而每个分区还有leader和follwer之分,而且只有leader分区才会被用于消费者消费。

那“备份”副本有什么用呢?

比如,当下图中的broker0挂掉了,消费不了TopicA-Partition0这个分区的消息,那就只能去消费broker2中的“备份”副本分区了,并且broker2中的分区也会晋升为leader。

kafka通过zookeeper来记录谁是leader,因此kafka的安装也需要安装zookeeper。但是后续版本也开始不再只依赖zookeeper了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值