Skip to content
核心概念

核心概念

Kafka 基本术语(Topic/Partition/Offset/Broker/副本/重平衡)、核心特性、消息模型、四大核心 API,以及 Kafka 高性能的原理。


基本术语

术语 说明
消息(Message) 数据单元,也称为记录(Record)
批次(Batch) 消息会分批次写入 Kafka,代指一组消息。批处理能提高吞吐量
主题(Topic) 消息的分类。一个 Topic 代表一类消息,可以理解为数据库中的"表"
分区(Partition) Topic 可被分为多个 Partition,分布在不同 Broker 上,实现水平扩展。单个 Partition 内消息有序,但无法保证跨 Partition 的有序性。例如三个分区:p0: 1 2 3 4 5, p1: 1 2 3, p2: 1 2 3 4 5 6
生产者(Producer) 向 Topic 发布消息的客户端
消费者(Consumer) 订阅 Topic 并处理消息的客户端
消费者群组(Consumer Group) 一个或多个消费者组成的群体。组内消费者共同消费一个 Topic,每条消息只被组内一个消费者处理
偏移量(Offset) 消息在 Partition 中的唯一标识,是一个不断递增的整数。用于记录消费进度,在发生重平衡时恢复消费位置
Broker 一个独立的 Kafka 服务器实例。接收生产者消息、为消息设置 Offset、将消息持久化到磁盘
Broker 集群 由多个 Broker 组成。每个集群有一个 Broker 同时充当集群控制器(Controller,通过选举产生)
副本(Replica) 消息的备份。分为 Leader 和 Follower——Leader 对外提供服务,Follower 被动同步。每个分区有 AR(全部副本集)、ISR(跟得上 Leader 的副本子集)两个名单(机制详解见 12 章)
高水位(HW, High Watermark) ISR 内所有副本都已落盘的最新位置。消费者只能读到 HW 之前的消息——“acks=all 不丢"的保障线(12 章)
重平衡(Rebalance) 消费者组内某个实例挂掉后,其他实例自动重新分配订阅分区的过程。是实现高可用的重要手段
KRaft / Controller Kafka 自管理的元数据层(Raft 协议,4.0 起替代并移除 ZooKeeper)。集群选出一个 Active Controller 负责 Leader 选举与元数据变更

Kafka 核心特性

  • 高吞吐、低延迟:Kafka 最大的特点就是收发消息极快,每秒可处理几十万条消息,最低延迟仅几毫秒。
  • 高伸缩性:每个 Topic 包含多个 Partition,Partition 可分布在不同的 Broker 上,实现水平扩展。
  • 持久性与可靠性:消息被持久化到磁盘(不是存储在 Zookeeper 中!),并支持多副本备份防止数据丢失。Kafka 的元数据(如 Broker 信息、Topic 配置等)存储在 Zookeeper 或 KRaft 中,而消息数据本身存储在本地磁盘上。
  • 容错性:允许集群中部分节点失败(只要 ISR 中有足够的副本),集群仍能正常工作。
  • 高并发:支持数千个客户端同时读写。

使用场景

场景 说明
活动跟踪 追踪用户行为:登录、浏览、搜索、购物偏好等,用于生成报表、智能推荐
消息传递 应用程序间的异步通信,如发送通知、状态同步
度量指标 收集分布式应用的运营监控数据,用于报警和报表
日志记录 将数据库更新、应用日志等以统一接口发送到 Kafka,再分发给 Hadoop、HBase、Solr 等下游
流式处理 作为流处理平台(如 Flink、Spark Streaming)的数据源
限流削峰 应对突发流量,将请求写入 Kafka 缓冲,避免直接压垮后端服务

Kafka 的消息模型

Kafka 同时支持两种消息模型:

  • 点对点模式(P2P):一条消息只被一个消费者消费。同一消费者组内的多个消费者竞争消费。
  • 发布-订阅模式(Pub-Sub):一条消息被多个消费者组同时消费(每个组独立维护 Offset)。不同消费者组之间互不影响。

系统架构概览

KRaft 时代(4.x)的集群全景,一条消息的完整旅程:

            Producer ──①写──▶ 分区 Leader 副本 ──②Follower 拉取复制──▶ ISR 副本
                                   │
                              ③消费者拉取(只读到 HW 为止)
                                   ▼
                              Consumer Group(组间独立、组内分分区)

元数据层:Controller Quorum(3~5 台,Raft 选举出 Active Controller)
          ├─ 维护 Topic/分区/副本/组成员变更
          ├─ 触发 Leader 选举
          └─ 与 Broker 数据面分离:quorum 全挂只停"管理操作",已有分区照常读写

读图要点:

  • 数据面是 Broker 间的异步复制日志流(Follower 主动拉,类 Pull),控制面是 Controller 的 Raft 元数据日志——两条链路互不阻塞,这是 KRaft 干掉 ZooKeeper 后架构上最大的红利;
  • 生产者写 Leader,消费者读 Leader(fetch 也优先同机架副本,12 章);Follower 只参与复制不对客户端提供读写(副本读取语义已废弃);
  • “分区"是并行与顺序的唯一粒度单位:Topic 只是逻辑分组,真正的存储、复制、消费分配全都发生在分区上。

集群搭建与故障转移细节见 12-集群与高可用。


Kafka 4.x 演进速览

2025-2026 年值得知道的变化(详细运维视角见 12 章):

  • 4.0(2025-03):移除 ZooKeeper(只跑 KRaft)、服务端要求 Java 17、MM1 下线;清理 2.x 以前的旧协议。
  • 4.1:生产者限流、Controller 切换更平滑。
  • 4.2(2026-02):Kafka Queues(Share Groups)GA——逐条 ACK + RENEW 续期的队列语义,Kafka 开始蚕食传统 MQ 的场景边界(与 RabbitMQ 的选型对照更新见 07 章)。
  • 4.3(2026-05):Broker 维护引流、分区容量指标、Streams Header 保持。
  • 动态 Controller Quorum(增删控制器不停机)、分层存储(对象存储降本)在 4.x 持续完善。

核心 API

Kafka 提供四大核心 API:

API 说明
Producer API 向一个或多个 Topic 发送消息
Consumer API 订阅一个或多个 Topic 并处理消息流
Streams API 将程序作为流处理器,消费输入流并生成输出流(数据转换)
Connector API 构建可复用的生产者和消费者,将 Kafka 连接到现有应用或数据系统(如数据库、搜索引擎)

Kafka 为什么这么快?

Kafka 的核心性能秘诀可以总结为四个要点:

  1. 顺序读写磁盘:Kafka 将消息以追加(append-only)方式写入日志文件,避免了随机磁盘寻址的巨大开销。顺序磁盘 I/O 的速度甚至可以媲美内存随机读写。

  2. 零拷贝(Zero Copy):Kafka 利用操作系统的 sendfile() 系统调用,数据从磁盘到网络传输过程中无需经过用户态内存拷贝,避免了内核态 ↔ 用户态的上下文切换开销。

  3. 消息压缩:支持 GZIP、Snappy、LZ4、Zstd 等压缩算法,减少网络传输和磁盘占用。

  4. 批量发送:从生产者 → 文件系统 → 消费者,数据以批次为单位端到端传输,有效减少 I/O 延迟和网络往返次数。


参考资料