Kafka Topic 分区详解
📌 一、分区核心概念
1. 什么是分区?
- 物理分片:Topic 被划分为多个分区(Partition),每个分区是一个有序、不可变的消息序列
- 存储单位:每个分区对应一个物理日志文件,存储在 Kafka Broker 上
- 并行基础:分区是 Kafka 实现并行处理和水平扩展的基础单元
如下:有三台kafka集群,cnbook 主题有三个分区,这三个分区分别位于不同的 broker
2. 分区核心特性
特性 | 说明 |
---|---|
消息有序性 | 分区内有序:同一分区中的消息按写入顺序存储 跨分区无序:不同分区的消息顺序不保证 |
数据持久化 | 每个分区对应磁盘上的日志文件(.log )和索引文件(.index ) |
并行消费能力 | 消费者组中不同消费者可同时消费不同分区 |
水平扩展能力 | 通过增加分区数提升 Topic 吞吐量 |
3. 分区存储结构
📌 关键点:分区是 Kafka 并行处理的最小单位,也是数据持久化的物理载体
⚙️ 二、分区工作原理
1. 消息写入流程
生产者通过 Partitioner(Kafka Partitioner 是用于将消息分配到不同分区的组件,主要用于在发送消息时确定消息的目标分区) 决定消息写入的目标分区,策略包括:
策略 | 触发条件 | 规则 |
---|---|---|
指定分区 | 明确指定分区号 | 直接写入指定分区 |
Key 哈希 | 消息携带 Key | 按 hash(key) % 分区数 选择分区,确保相同 Key 的消息进入同一分区 |
轮询(默认) | 无分区号且无 Key | 依次轮询所有分区,保证数据均匀分布 |
2.分区与消费者
- 消费者组(Consumer Group):
一个 Partition 只能被组内一个 Consumer 消费,实现并行处理
消费者数量 ≤ Partition 数量,否则多余消费者闲置
即:同组内消费者竞争消费一条消息,没有消费到消息的消费者闲置,不同组内的消费者可以同时消费某一条消息
参考:deepseek
B站项桦瑾Kafka介绍