Kafka学习笔记(一)-基本概念

Kafka 功能可以概括为三大角色:

  • 消息系统:除了传统消息中间件具备的解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能,Kafka 还提供了大多数消息系统难以实现的消息顺序性保障(指 单分区的消息顺序保障)及回溯消费的功能。
  • 存储系统:消息持久化功能和多副本机制
  • 流式处理平台

基本概念

体系结构

典型的Kafka体系结构可以概括为

  • 若干 Producer。Producer:生产者,即发送消息的一方,负责创建消息然后投递到Kafka中
  • 若干 Broker。Broker:服务代理节点,简单理解就是一台服务器。一台服务器只能跑一个Broker实例,多个服务器跑多个Broker实例组成了Kafka集群。因此,一个broker,我们理解成一台服务器或者一个Kafka节点。
  • 若干 Consumer。Consumer:消费者,即接收消息的一方,消费者连接到Kafka上并接收消息
  • 一个 Zookeeper。控制集群中的选举以及元数据(比如分区、发送前的缓存等)的管理。

消息发送

生产者和消费者之间通过 Topic 传递消息,Producer 向指定 Topic 发送消息,消费者订阅/监听该 Topic ,当收到消息后进行自己的逻辑。

基于这个消息传递的过程,Kafka 中有如下概念:

  • Topic(主题):消息根据 Topic 分类,每一条消息都要指定一个 Topic ,生产者发送消息到 Topic,消费者订阅 Topic。
  • Partition(分区):一个主题可以细分为多个分区,每个分区内存放的消息不同,分区我们可以理解成一个个 log文件,每条消息都是不断的在 log 文件尾端插入,每个插入的位置可以通过 offset(偏移量)来指定。Kafka 通过 offset 来保证 单分区内的顺序性。不过 offset 不能跨分区,即分区 A 和 分区 B 都存在偏移量为 1 的消息,且俩消息不相同。

一个 Topic 可以有很多 partition ,每个 partition 可以部署在不同的 broker 上。

一台服务器可以作为 broker 处理生产者发来的元数据,也可以同时用来作为存储系统存消息。

如果一个 Topic 只对应一台服务器,那么这台服务器的 I/O 将会成为这个主题的性能瓶颈,因此我们可以通过一定选取分区规则来跨服务器。

多副本机制

Kafka 为分区引入了多副本机制(Replica),当然也存在主从延迟的问题。

同一分区的不同副本中保存的是同样的消息(同一时刻,副本并非完全一样)。同 Redis、MySQL 一样,一主多从的模式。主 Kafka 称为 leader,从 Kafka 称为 follower。

leader 副本负责读写请求,follower 副本负责与 leader 副本的消息同步。当 leader 出现故障时,由 Zookeeper 来选举新的 leader。

  • AR(Assigned Replicas):分区中的所有副本。
  • ISR(In Sync Replicas):AR 集合的子集。ISR 中的副本相对于 leader 存在一定的可以容忍的延迟(可以通过参数配置)。
  • OSR(Out of Sync Replicas):延迟不可容忍。

AR = ISR + OSR。

  • HW(High Watermark):高水位线,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。
  • LEO(Log End Offset):分区私有,表示下一个要写入消息的 offset。

HW 即为同一个 Topic 下所有 LEO 中最小的那个 LEO。

文章作者: yPhantom
文章链接: https://guoyuxiang.cn/2021/03/22/kafka-note-1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Life Note