[ 消息队列-Kafka | 青训营笔记 ]

106 阅读3分钟

一、Kafka概述

1.1、简介

kafka是一个分布式的基于发布/订阅模式的消息队列

主要应用场景:大数据实时处理领域

1.2、什么是消息队列?

消息队列 = 消息 + 队列

消息 : 说白了就是数据(请求数据、业务数据等等)

队列 : 就是队列(数据结构中线性表或链表实现的先入先出的队列)

消息队列就是存放数据的队列,一种容器而已,消息队列的概念很简单,但结合实际的应用场景便很复杂。 image.png 如图便是消息队列最简单的消息队列模型。

  • 向消息队列中存放数据的叫做生产者
  • 从消息队列中获取数据的叫做消费者

1.3、消息队列模式

消息队列有两种

1.3.1、点对点模式(消费者主动拉取数据)

image.png 生产者将数据放在消息队列中,消费者消费数据后,消息队列会将数据删除,队列支持可以存在多个消费者,但一个消息能由其中一个消费者消费,即消息和消费者之间是一对一的。

1.3.2、发布/订阅模式

image.png 如图发布\订阅模式有一个主题的概念,生产者定义主题,将消息存放在相应的主题中,消费者订阅主题,从该主题中获取数据进行消费,如图该模式下,允许多个消费者订阅同一主题,主题中的每个消息可由多个消费者进行消费,即:消息与消费者之间是一对多的

1.3.3、消费者获取数据的两种方式

  • pull:消费者主动拉取;数据消费者决定自己何时请求并接收数据,数据持有者只能被动地响应请求
  • push:生产者主动推送;数据生产者决定何时向消费者推送数据。数据消费者不知道何时会收到数据更新

二、Kafka分布式基础架构

image.png 如图是Kafka的基础架构:

  • Kafka是一个基于分布式的发布订阅模式的消息队列,所以在真实场景中,Kafka是分布式部署在集群上。
  • Topic:主题,就是一个消息队列,一个Kafka集群上运行者多个主题,也就是多个消息队列。
  • Partition:分区,为了增强可扩展性,提高吞吐量,引入了分区,一个主题可以被分成多个分区,每个分区运行在集群的一个节点上。
  • leader:每个节点可能同时存在多个主题的分区,为了增强集群的高可用,为每个主题的分区都提供了副本,一个分区可以有多个副本,但只有一个能被选为leader,被选为leader的分区对外提供服务,即生产者只将数据存放在leader中,消费者只从leader中获取数据。
  • follew:leader的副本,一般情况下只将leader中的数据进行同步,当leader挂掉了,有重新选择一个副本作为leader,对外服务,目的提高系统的可用性。
  • CG:消费者组,逻辑意义上的消费者,一个消费者组中有多个消费者,这些消费者订阅了同一个主题,也可能订阅不同的主题,每个消费者消费不同分区的数据,一个分区只能被一个消费者消费,消费者组之间互不影响。