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介紹