一、Kafka概述
1.1、简介
kafka是一个分布式的基于发布/订阅模式的消息队列
主要应用场景:大数据实时处理领域
1.2、什么是消息队列?
消息队列 = 消息 + 队列
消息 : 说白了就是数据(请求数据、业务数据等等)
队列 : 就是队列(数据结构中线性表或链表实现的先入先出的队列)
消息队列就是存放数据的队列,一种容器而已,消息队列的概念很简单,但结合实际的应用场景便很复杂。
如图便是消息队列最简单的消息队列模型。
- 向消息队列中存放数据的叫做生产者
- 从消息队列中获取数据的叫做消费者
1.3、消息队列模式
消息队列有两种
1.3.1、点对点模式(消费者主动拉取数据)
生产者将数据放在消息队列中,消费者消费数据后,
消息队列会将数据删除,队列支持可以存在多个消费者,但一个消息能由其中一个消费者消费,即消息和消费者之间是一对一的。
1.3.2、发布/订阅模式
如图发布\订阅模式有一个主题的概念,生产者定义主题,将消息存放在相应的主题中,消费者订阅主题,从该主题中获取数据进行消费,如图该模式下,允许多个消费者订阅同一主题,主题中的每个消息可由多个消费者进行消费,即:
消息与消费者之间是一对多的。
1.3.3、消费者获取数据的两种方式
- pull:消费者主动拉取;数据消费者决定自己何时请求并接收数据,数据持有者只能被动地响应请求
- push:生产者主动推送;数据生产者决定何时向消费者推送数据。数据消费者不知道何时会收到数据更新
二、Kafka分布式基础架构
如图是Kafka的基础架构:
- Kafka是一个基于分布式的发布订阅模式的消息队列,所以在真实场景中,Kafka是分布式部署在集群上。
- Topic:主题,就是一个消息队列,一个Kafka集群上运行者多个主题,也就是多个消息队列。
- Partition:分区,为了增强可扩展性,提高吞吐量,引入了分区,一个主题可以被分成多个分区,每个分区运行在集群的一个节点上。
- leader:每个节点可能同时存在多个主题的分区,为了增强集群的高可用,为每个主题的分区都提供了副本,一个分区可以有多个副本,但只有一个能被选为leader,被选为leader的分区对外提供服务,即生产者只将数据存放在leader中,消费者只从leader中获取数据。
- follew:leader的副本,一般情况下只将leader中的数据进行同步,当leader挂掉了,有重新选择一个副本作为leader,对外服务,目的提高系统的可用性。
- CG:消费者组,逻辑意义上的消费者,一个消费者组中有多个消费者,这些消费者订阅了同一个主题,也可能订阅不同的主题,每个消费者消费不同分区的数据,一个分区只能被一个消费者消费,消费者组之间互不影响。