Kafka 核心概念全景解析
Apache Kafka 是一個分布式、分區、多副本的提交日志服務,常用作高吞吐消息隊列、日志聚合、流式處理骨幹。本文系統梳理其核心架構、存儲設計、消費模型、傳輸語義及 Zookeeper 協作機制。
1. 基本術語
| 術語 | 含義 |
| Topic | 消息類別/主題 |
| Partition | Topic 的物理分區,有序、不可變日志段 |
| Offset | 分區內消息唯一位移(Long) |
| Broker | Kafka 服務器實例 |
| Producer | 消息發送者 |
| Consumer | 消息接收者 |
| Consumer Group | 消費者組,實現負載均衡或廣播 |
| Leader / Follower | 分區副本的主從角色 |
| ISR | In-Sync Replicas,與 Leader 同步的副本集合 |
| Zookeeper | 元數據存儲、協調服務 |
2. Topic & Partition 存儲設計
- 一個 Topic 含多個 Partition,分散多 Broker,突破單機磁盤限制
- Partition 內消息按 Offset 有序追加寫(Sequential Write),極高吞吐
- 消息不隨消費刪除,按
log.retention.hours 或大小策略過期清理
- Segment 分段存儲,便於過期刪除與索引查找
3. 分布式協調:Zookeeper 角色
- Broker 註冊:
/brokers/ids/[id] 存 host:port
- Topic 註冊:
/brokers/topics/[topic]/[partition]
- Consumer 註冊與 Rebalance:
/consumers/[group]/ids、/consumers/[group]/owners、/consumers/[group]/offsets
- Controller 選舉:監聽 Broker 變更,選主管理 Partition Leader
4. Producer 核心機制
- 直連 Leader 發送,無路由層,客戶端決定 Partition(Key Hash / Round-Robin / 自定義)
- 批次緩衝
batch.size、linger.ms 提升網絡效率
- 壓縮
compression.type=snappy/gzip 降低網絡 IO
acks=0/1/all 控制可靠性等級
5. Consumer 核心機制
- Pull 模式:Consumer 主動 Fetch,自主控制速率與 Offset
- Group 語義:同 Group 內 Partition 僅被一 Consumer 消費;不同 Group 則廣播
- Offset 管理:定期提交至 Zookeeper(舊版)或
__consumer_offsets Topic(新版)
- Rebalance:Consumer 增減、Broker 變更觸發 Partition 重新分配
6. 消息傳輸語義
| 語義 | 特點 | 實現要點 |
| At Most Once | 可能丟失 | 先提交 Offset 再處理 |
| At Least Once | 可能重複(默認推薦) | 先處理再提交 Offset,冪等處理 |
| Exactly Once | 嚴格一次(Kafka 0.11+ 事務 API) | Producer 事務 + Consumer 隔離級別 |
7. 副本同步與故障轉移
- Leader 處理所有讀寫,Follower 拉取同步
replica.lag.time.max.ms 判斷落後,剔除 ISR
- Leader 故障 → Controller 從 ISR 選新 Leader(優先 Up-to-date、負載均衡)
- 只要 ISR 非空且 ZK 存活,服務可用(不同於 Quorum 多數派)
8. 關鍵配置速查
# Broker
broker.id=1
listeners=PLAINTEXT://:9092
log.dirs=/data/kafka-logs
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
num.partitions=3
default.replication.factor=2
log.retention.hours=168
log.segment.bytes=1073741824
# Producer
bootstrap.servers=...
acks=all
retries=3
batch.size=16384
linger.ms=5
compression.type=snappy
# Consumer
group.id=my-group
enable.auto.commit=false
auto.offset.reset=earliest
max.poll.records=500
理解上述核心概念,是進行 Kafka 集群運維、性能調優、業務集成的基石。建議搭建單機/偽集群環境,配合 kafka-console-producer/consumer 實戰驗證各項機制。
- 上一篇文章: 藍橋杯真題解析:核桃數量問題(最小公倍數應用)
- 下一篇文章: Java Runtime.exec() 坑點深度解析:阻塞、死鎖、命令解析與最佳實踐
Copyright ©
程式碼之家 All Rights Reserved