Skip to content

概念

约 849 字大约 3 分钟

2025-05-09

Kafka 是一个分布式流式处理平台

关键功能

  • 消息队列:发布和订阅消息流
  • 容错的持久方式存储记录消息流:Kafka 会吧消息持久化至磁盘
  • 流式处理平台:能够在消息发布时进行处理

应用场景

  • 消息队列:
  • 消息处理:

优势

高性能:设计中大量使用批处理与异步,顺序写磁盘+零拷贝=高TPS 强大的生态与兼容性

核心概念

架构图 ^712ff1

Producer

生产者:产生消息的一方

Consumer

消费者:消费消息的一方

Broker

代理:可以看作一个独立的Kafka实例,多个Broker组成一个集群

Topic

主题:生产者产生消息,发送至指定的Topic,而消费则是订阅指定的Topic并从中获取消息消费

Partition

分区:一个Topic中可以有多个分区,同一Topic下的不同Partition可以分布在不同的Broker上,这就实现了Topic的跨BrokerPartition能够使同一个消费组的多个消费者并发消费消息

  • 分区数量 < 消费者数量:一个分区对应一个消费者,其余消费者空闲
  • 分区数量 = 消费者数量:一个分区对应一个消费者
  • 分区数量 > 消费者数量:一或多个消费者负责多个分区

从[[#^712ff1|架构图]]中可以看到,Partition实际上可以对应消息队列中的队列

好处

同一Topic能够能够分布在不同的Broker上,能够提供较好的并发能力

多副本机制

每一个Partition存在多个副本,分为leaderfollower两种身份,可以看作followerleader的备份,消费者和生产者始终与leader交互;当leader更新后其他的follower才会从leader中拉取更新,而当leader故障时会从follower中选举出新leader

好处

提高的消息存储的安全性与容灾能力

zookeeper 对 Kafka 的作用

Kafka2.8 前,依靠 zookeeper 进行集群的管理,包括

  • Broker的注册
  • Topic注册至不同的Broker
  • 根据代理负载降消息存放在不同的Broker上,实现负载均衡

注册中心

生产者与消费者需要知道应该与集群中的哪个 Broker 交互,因此需要一个「注册中心」复制管理节点

ZooKeeper

Kafka2.8 以前使用 zookeeper 作为注册中心

注册

各个服务实例在启动时会向注册中心注册自己,代表该实例加入该集群

发现

当客户端(生产者或消费者)需要调用服务时,会向注册中心查询自己需要的服务的服务提供者的位置(例如消费者需要消费某个主题,需要知道自己需要访问具体 Broker 的位置)

其他功能

  • 负载均衡
  • 健康检查
  • 故障转移

Kraft

Kafka2.8 后引用 Kraft 共识协议替代 zookeeper

如何替代注册中心?

通过 Raft 协议选举 Controller 客户端连接集群中任意 Broker,即可获得集群的 Broker、Topic 信息,实现了发现 新 Broker 通过配置指定的初始节点,通过向 Controller 发送加入请求加入集群

优点

  • 不再依赖 zookeeper,简化部署与维护
  • 元数据操作更快