Kafka基本概念与术语

本文来说下kafka的基本概念与术语

文章目录

  • 消息队列
  • kafka架构图
  • Kafka相关概念及术语
  • 本文小结


消息队列

把数据放到消息队列叫做生产者。从消息队列里边取数据叫做消费者

消息队列,我们一般简称为MQ(Message Queue) 队列是我们常说的一种先进先出的数据结构。消息队列可以简单理解为:把要传输的数据放在队列中。

消息队列的两种模式:

  • 点对点:生产者生产消息发送到队列中,消费者从队列中取出并且消费消息。消息被消费以后,队列中不再有存储,所以消费者不可能消费到已经被消费的消息。队列支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
  • 发布/订阅:生产者将消息发布到topic中,同时有多个消费者订阅该消息。和点对点方式不同,只要消费者订阅了这个topic,发布到topic的消息会被所有订阅了该topic的消费者消费。

两者之间最大的不同是:点对点模式中一旦数据被消费了,就会从队列中移除,但是发布/订阅模式不会

Kafka就是基于发布/订阅模式的分布式消息系统。与其它的消息队列对比,kafka最大的特点就是它的高吞吐量(存的多,读取的快)。


kafka架构图

Kafka基本概念与术语_第1张图片

简单介绍下上图内容及工作流程,对相关术语在kafka中的用途有整体认识:

如上图:两个生产者(Producer)A和B;三个消费者A,B,C,并且A和B存在于同一个消费者组;kafka集群中三个broker,两个topic,分别是TopicA,TopicB;TopicA有两个分区(Partition),每个分区有两个副本,分别存在于Broker1和Broker2上,TopicB有一个分区,一个副本,存在于Broker3上,整个集群信息在Zookeeper上注册。

1、生产者向主题生产消息,发布到kafka集群,写入到Leader Replica,Follower Replica 向领导者副本发送请求,请求领导者把最新生产的消息发给它,这样它能保持与领导者的同步,进行消息冗余。

2、消费者(组)从kafka集群订阅消息,读取Leader Replica中的消息进行消费。


Kafka相关概念及术语

在 Kafka 的世界中有很多概念和术语需要熟练掌握,有助于深入理解Kafka原理。

kafka的相关术语有:生产者Producer,消费者Consumer,消费者组Consumer Group,代理Broker,集群Cluster,消息message,主题Topic,分区Partition,副本Replica,消息位移Offset,消费者位移Consumer Offset,重平衡Rebalance。

生产者(Producer)

向主题发布新消息的客户端应用程序。是消息产生的源头,负责生成消息并发送到Kafka服务器上。

消费者(Consumer)

从主题订阅新消息的客户端应用程序。与生产者类似,消费者也能够同时订阅多个主题的消息。是消息的使用方,负责消费Kafka服务器上的消息。

消费者组(Consumer Group)

多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。

我们把生产者和消费者统称为客户端(Clients)。你可以同时运行多个生产者和消费者实例,这些实例会不断地向 Kafka 集群中的多个主题生产和消费消息。

在kafka中,我们可以认为一个group就是一个订阅者,一个消费者只能属于一个消费者组。一个topic中的一个分区,只会被一个group中的一个消费者消费。对于一个topic,同一个group不允许有多于分区个数的消费者同时消费,这意味着有些消费者无法消费到数据。

代理(Broker)

Kafka 的服务器端由被称为 Broker 的服务进程构成,即一个 Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。虽然多个 Broker 进程能够运行在同一台机器上,但更常见的做法是将不同的 Broker 分散运行在不同的机器上,这样如果集群中某一台机器宕机,即使在它上面运行的所有 Broker 进程都挂掉了,其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。

broker(kafka集群服务器):是Kafka的服务器,用来存储消息。

Zookeeper集群

kafka是基于zookeeper的,所以需要先搭建一个zookeeper集群,在zookeeper中存储的信息有broker,consumer等重要znode信息。

消息(message)

Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。

主题(Topic)

主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。是逻辑上的概念,生产者生产的消息可以按类别分为多个主题。消费者按主题订阅,消费自己订阅的主题下的数据。

分区(Partition)

一个有序不变的消息序列。每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志。生产者生产的每条消息只会被发送到一个分区中,也就是说如果向一个双分区的主题发送一条消息,这条消息要么在分区 0 中,要么在分区 1 中。如你所见,Kafka 的分区编号是从 0 开始的,如果 Topic 有 100 个分区,那么它们的分区号就是从 0 到 99。

是物理上的概念,对于一个topic,kafka维护一个或多个分区。关于分区,还有一个replicas(副本)的概念,顾名思义就是copy版本,防止分区挂掉了,数据丢失。其中一个副本为leader,其他都为follower。leader处理分区的所有读写工作,follower会定期同步leader上的数据,如果leader挂掉了,kafka会从follower中选举出新的leader。

副本(Replica)

Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。Kafka 定义了两类副本:领导者副本(Leader Replica)和追随者副本(Follower Replica),前者对外提供服务,这里的对外指的是与客户端程序进行交互;而后者只是被动地追随领导者副本而已,不能与外界进行交互。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。副本的工作机制也很简单:生产者总是向领导者副本写消息;而消费者总是从领导者副本读消息。至于追随者副本,它只做一件事:向领导者副本发送请求,请求领导者把最新生产的消息发给它,这样它能保持与领导者的同步。

消息位移(Offset)

表示分区中每条消息的位置信息,是一个单调递增且不变的值。

消费者位移(Consumer Offset)

表征消费者消费进度,每个消费者都有自己的消费者位移。

offset(偏移量)

分为生产者的offset和消费者的offset。

生产者offset:不管是多少个生产者,还是我们规定了他们会写入哪一个分区,但只要他们写入的时候,一定是每一个分区都有一个offset,这个offset就是生产者的offset,同时也是这个分区的最新最大的offset。

消费者offset:某一个分区的offset情况,我们已经知道生产者写入的offset是最新最大的值也就是12,而当Consumer A进行消费时,他从0开始消费,一直消费到了9,他的offset就记录在了9,Consumer B就记录在了11。等下一次他们再来消费时,他们可以选择接着上一次的位置消费,当然也可以选择从头消费,或者跳到最近的记录并从“现在”开始消费。消费者的offset是他自己维护的,他可以选择分区最开始,最新,也可以记住他消费到哪了。

重平衡(Rebalance)

消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。


本文小结

本文详细介绍了kafka相关的概念与内容。

你可能感兴趣的:(核心知识点,消息队列kafka,kafka)