← 返回题目列表

Kafka 的整体架构和核心概念是什么?

高频 中等 第 7 / 25 题 更新于 2026/07/28
消息队列Kafka架构分区

简化版

Kafka 的核心概念:Producer(生产者)发消息、Consumer(消费者)收消息、Broker(服务器节点)存消息,多个 Broker 组成集群。消息按 Topic(主题)分类,每个 Topic 分成多个 Partition(分区,是并行和存储的基本单位),分区内消息有序、用 Offset(偏移量)标识位置。分区有多个**副本(Replica)**做冗余,一个是 Leader(读写)其余是 Follower(同步备份)。Consumer Group(消费者组)实现「组内分摊消费、组间广播」——同一分区在一个组内只被一个消费者消费。早期靠 ZooKeeper 管理元数据(新版转向 KRaft)。

详细版

核心概念一览:

概念说明
Producer生产者,发送消息到指定 Topic
Consumer消费者,从 Topic 拉取消息
BrokerKafka 服务器节点,存储消息;多个组成集群
Topic消息的逻辑分类(主题)
Partition分区,Topic 的物理分片,并行和有序的基本单位
Offset分区内每条消息的唯一递增编号(消费位置)
Replica分区副本,Leader 负责读写、Follower 同步备份
ISRIn-Sync Replicas,与 Leader 保持同步的副本集合
Consumer Group消费者组,组内分摊消费、组间各自广播

消费者组的关键规则:一个分区在同一个消费者组内只能被一个消费者消费(保证组内不重复),所以消费者数 ≤ 分区数才能全部有活干。不同消费者组各自独立消费全量消息(广播效果)。

完整版教学

一、整体架构:生产者、Broker 集群、消费者

Kafka 是一个分布式的发布订阅消息系统,三大角色:

  • Producer(生产者):产生消息,发送到某个 Topic。
  • Broker(服务器):Kafka 的服务节点,负责接收、存储、转发消息。多个 Broker 组成集群,数据分布在各节点上。
  • Consumer(消费者):订阅 Topic,从中拉取消息消费。

生产者写、Broker 存、消费者读,三者通过 Topic 组织起来。

二、Topic 与 Partition:逻辑分类 + 物理分片

Topic(主题) 是消息的逻辑分类——比如「订单消息」「日志消息」各是一个 Topic,生产者按 Topic 发、消费者按 Topic 订阅。

但一个 Topic 如果只是一个大队列,就无法并行、无法扩展。所以每个 Topic 被拆成多个 Partition(分区)

  • 分区是物理存储单位:每个分区是一个独立的、只追加的日志文件,分布在不同 Broker 上。
  • 分区是并行单位:多个分区可以被多个消费者并行消费,多个 Broker 并行读写。
  • 分区内有序,分区间无序:同一分区的消息按写入顺序排列(用 Offset 标识),但跨分区没有全局顺序。

生产者发消息时,通过 key 的哈希(或轮询)决定消息进哪个分区。

三、Offset:消费位置的书签

Offset(偏移量) 是分区内每条消息的唯一、递增的编号,标识消息在分区里的位置。它有两层含义:

  • 消息的位置:分区里第 0 条、第 1 条、第 2 条……
  • 消费的进度:消费者记录「我消费到哪个 offset 了」(提交 offset),下次从这里继续。

消费进度(offset)由消费者组维护——存在 Kafka 内部的 __consumer_offsets Topic 里。手动/自动提交 offset 决定了消费的可靠性(提交早了可能丢消息,提交晚了可能重复消费)。

四、副本机制:Leader、Follower 与 ISR

为了高可用(一个 Broker 挂了数据不丢),每个分区有多个副本(Replica),分布在不同 Broker 上:

  • Leader 副本:负责该分区的所有读写请求。
  • Follower 副本:从 Leader 同步数据,作为备份,不直接对外服务。
  • ISR(In-Sync Replicas):与 Leader 保持同步的副本集合。只有 ISR 中的副本才有资格在 Leader 挂掉时被选为新 Leader。

故障转移:Leader 所在 Broker 宕机时,从 ISR 中选一个 Follower 成为新 Leader,继续服务,数据不丢(前提是 acks=all + min.insync.replicas 配置得当)。这套机制保证了 Kafka 的高可用和数据可靠。

五、消费者组:分摊消费 + 广播

Consumer Group(消费者组) 是 Kafka 消费模型的精髓,它同时实现了「队列」和「发布订阅」两种语义:

组内——分摊消费(队列语义):

  • 同一个消费者组内,一个分区只会被组内的一个消费者消费(不会重复)。
  • 组内的多个消费者分摊该 Topic 的所有分区,各消费一部分,实现负载均衡和并行。
  • 关键推论:消费者数量超过分区数无意义(多出的消费者分不到分区、空闲)。所以并行度上限 = 分区数。

组间——广播(发布订阅语义):

  • 不同的消费者组各自独立消费同一个 Topic 的全部消息,互不影响。
  • 比如「订单 Topic」被「库存组」「积分组」「大数据组」三个组订阅,每个组都能收到全量订单消息,各干各的。

当消费者组内消费者数量变化(加入/退出/宕机),会触发 Rebalance(重平衡),重新分配分区给消费者。Rebalance 期间消费会短暂停止。

六、常见误区与追问

考点正确口径
Topic/PartitionTopic 逻辑分类,Partition 提供并行和有序日志
BrokerKafka 服务节点,存储分区副本
Consumer Group组内分摊分区,组间广播消费
topic order has 3 partitions
P0 leader on broker1
P1 leader on broker2
P2 leader on broker3

consumer group A: each partition consumed by one member

Kafka 的核心是“分区日志”:分区内有序,分区间并行。

  • 误区:Kafka 的 Topic 全局有序。 Kafka 只保证单个 Partition 内有序,Topic 多分区无法天然全局有序。
  • 误区:消费者组里一个分区能被多个消费者同时消费。 同一消费组内,一个分区同一时刻只能分配给一个消费者。
  • 误区:副本越多吞吐越高。 副本提升可靠性,但复制会增加网络和磁盘开销。
  • 追问:Leader/Follower 副本如何工作? 读写通常走 Leader,Follower 从 Leader 拉取复制数据。
  • 追问:Offset 是什么? Offset 是分区日志中的位置,消费者用它记录消费进度。
  • 追问:为什么 Partition 能提升吞吐? 分区把日志拆到多 broker 和多消费者上,实现存储和消费并行。

七、加强记忆

Kafka 架构 = Producer 发、Broker 集群存、Consumer 收,消息按 Topic 分类。每个 Topic 分多个 Partition(并行 + 存储单位,分区内有序、分区间无序),分区内消息用 Offset(递增编号)标识位置和消费进度。分区有多副本Leader 读写、Follower 同步ISR 是同步副本集合(Leader 挂了从 ISR 选新 Leader,保高可用)。Consumer Group 实现「组内分摊消费(一分区只被组内一消费者消费,故消费者数 ≤ 分区数)+ 组间广播(不同组各自消费全量)」,成员变化触发 Rebalance。老版用 ZooKeeper 管元数据、新版转 KRaft。记忆锚点:Topic 分区、Offset 定位、Leader/ISR 保可用、消费者组分摊+广播