Kafka

Kafka 组件详解

·10 分钟阅读·3820 字

Kafka 核心组件及其工作原理 — 生产者、消费者、Broker、主题、分区、副本、消费组等

📋 目录

Kafka 组件详解

1. 组件

名词定位核心说明
生产者(Producer)消息发送方将消息发布到指定主题,按分区策略路由到目标分区
消费者(Consumer)消息接收方从主题中拉取消息,依靠偏移量跟踪消费进度
代理(Broker)服务节点接收生产者消息、持久化存储、对外提供消息读取服务
主题(Topic)消息逻辑分类消息的逻辑归类单元,内部包含多个分区
分区(Partition)物理存储单元有序、不可修改的消息序列,一个Topic由多个分区组成,分散部署在不同Broker
副本(Replica)数据冗余机制分区的多副本实现高可用,分为Leader副本、Follower副本;读写仅走Leader,Follower负责同步数据
消费组(Consumer Group)消费者逻辑分组一组消费者协同消费同一个Topic,实现负载均衡;一个分区同一时间只能被组内一个消费者消费
协调器(Coordinator)消费组管理器管理消费者上下线、触发Rebalance、执行分区分配、维护消费组元数据与offset
控制器(Controller)集群管控节点通过Zookeeper选举产生,统一管理集群分区、副本状态切换(Leader切换等)
Zookeeper元数据存储中心存储集群元信息、选举Controller;旧版本Kafka默认存储消费偏移量(新版本迁移至内部主题__consumer_offsets)

2. 消息生产端

2.1. 生产者(Producer)

生产者负责将消息发布到 Kafka 集群。

核心功能:

  • 消息路由:根据分区策略决定消息发送到哪个分区
  • 发送模式:支持同步和异步两种发送方式
  • 批量发送:积累多条消息后批量发送,提升吞吐量
  • 消息结构:可自定义消息的键(Key)和值(Value),以及时间戳等属性 数据流:

生产者 → 序列化器 → 分区器 → 缓冲区 → 网络线程 → Broker(指定分区)

分区策略 默认分区器根据消息 Key 的哈希值取模决定目标分区;若 Key 为 null,则轮询发送到各分区。


3. 消息存储端

3.1. 代理(Broker)

Broker 是 Kafka 集群中的服务器节点,是消息流转的核心中枢。

核心职责:

  • 接收生产者发送的消息,将消息持久化存储到本地磁盘
  • 为消费者提供消息读取服务
  • 维护主题和分区的元数据信息
  • 管理分区的副本(副本选举、同步等)
  • 与 Zookeeper 协同工作,进行集群的管理和协调

3.2. 主题(Topic)

主题是消息的逻辑分类,每个主题可包含多个分区。

关键配置参数:

参数说明
分区数量决定主题的并发处理能力
副本因子用于数据冗余和容错

主题还可设置权限控制,限制生产者和消费者对其的访问。

3.3. 分区(Partition)

分区是主题的物理划分,分布在不同 Broker 上。

核心特性:

特性说明
有序序列每个分区是一个有序的、不可变的消息序列,新消息追加到分区末尾
偏移量标识分区内的消息通过**偏移量(Offset)**唯一标识,保证消息在分区内的顺序性
分段存储消息数据分成多个段文件(Segment),便于管理和提高读写性能

分区的作用:

  • 实现数据的并行处理和存储
  • 提高系统的吞吐量和可扩展性
  • 每个分区可独立读写,不同分区分布在不同 Broker,实现分布式存储和处理

分区分配机制 生产者在发送消息时,根据指定的分区策略将消息发送到特定分区。消费者组中的消费者被分配到不同分区进行消费,实现对主题消息的并行消费。 📖 深入阅读:Kafka 分区 Partition 完整详解

3.4. 副本(Replica)

副本为分区提供数据冗余和高可用性。

副本角色:

角色说明
领导者副本(Leader Replica)负责处理生产者和消费者的读写请求
追随者副本(Follower Replica)从领导者副本同步数据,保持与领导者一致性

副本管理:

  • 每个分区的多个副本分布在不同 Broker 上
  • 当某 Broker 故障时,其他副本可继续提供服务,确保数据不丢失
  • Kafka 通过控制器管理副本的选举和同步过程
  • 当 Leader 副本所在 Broker 故障时,控制器从 Follower 中选举出新的 Leader 数据流(副本同步):

生产者 → Leader 分区(写入)

                ↓

          Follower 1  ← 拉取同步

          Follower 2  ← 拉取同步

4. 消息消费端

4.1. 消费者(Consumer)

消费者从 Kafka 集群的主题中读取消息进行处理。

核心机制:

  • 消费者组管理:消费者通过消费者组进行管理
  • 偏移量追踪:根据**偏移量(Offset)**确定从何处开始消费消息
  • 偏移量提交:提交偏移量以记录已消费的位置,便于故障恢复或重启时从正确位置继续消费
  • 分区分配:每个消费者组中的消费者负责消费主题中的部分分区

4.2. 消费组(Consumer Group)

消费组是一组消费者的集合,共同消费一个或多个主题的消息。

核心特性:

特性说明
负载均衡Kafka 自动在消费组内的消费者之间进行负载均衡,根据消费者数量和分区数量动态分配分区
Rebalance当消费组中新增或移除消费者时,触发重新平衡,重新分配分区
消息可见性每个消费组独立跟踪自己的偏移量,不同消费组之间的消费相互独立、互不影响

同一个消息可被多个消费组同时消费,每个消费组都有自己的消费视角和进度。

4.3. 协调器(Coordinator)

协调器管理消费者组的相关事务。

核心职责:

职责说明
成员管理处理消费者的加入和离开组
分区分配为消费者分配分区
心跳检测通过心跳机制检测消费者的存活状态
Rebalance 触发当消费者组变化时,触发重新平衡操作,重新分配分区

5. 集群管控层

5.1. 控制器(Controller)

控制器是 Kafka 集群中的一个特殊角色,由 Zookeeper 选举产生。

核心职责:

职责说明
分区管理管理分区的创建和删除
副本选举管理副本的选举过程
Broker 监控监控 Broker 状态,当 Broker 加入或离开时协调分区和副本的重新分配

5.2. Zookeeper

Kafka 依赖 Zookeeper 管理集群元数据。

核心作用:

作用说明
元数据管理存储主题、分区、Broker 的状态等元数据信息
Controller 选举选举 Kafka 集群的控制器
消费者组协调帮助消费者组进行成员管理
偏移量存储存储消费偏移量

Zookeeper 的演进 在 Kafka 2.8+ 版本中,Kafka 引入了基于 Kraft 的共识机制,可逐步脱离 Zookeeper 独立运行。但当前主流生产环境仍广泛依赖 Zookeeper。


6. 组件协作流程图


生产者(Producer)

    │

    ▼

┌─────────────────────────────────────┐

│          Kafka 集群                   │

│                                      │

│  Controller ←→ Zookeeper             │

│       │                              │

│  Broker 1   Broker 2   Broker 3      │

│  ┌──────┐  ┌──────┐  ┌──────┐       │

│  │TopicA│  │TopicA│  │TopicA│       │

│  │Part0 │  │Part1 │  │Part2 │       │

│  │Leader│  │Leader│  │Leader│       │

│  │      │  │      │  │      │       │

│  │Part1 │  │Part2 │  │Part0 │       │

│  │Foller│  │Foller│  │Foller│       │

│  └──────┘  └──────┘  └──────┘       │

└─────────────────────────────────────┘

    │

    ▼

消费者(Consumer)← 协调器(Coordinator)管理分组

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro