Kafka 整体架构¶
Kafka 整体架构图¶
flowchart TD
subgraph Client_Apps [Java 生产者服务]
P_App[Producer App Instance]
P_App --> P0[Producer Thread 0]
P_App --> P1[Producer Thread 1]
end
subgraph Kafka_Cluster [Kafka Cluster - 副本因子: 2]
direction TB
subgraph Broker_0 [Broker 0]
T1P0L["Topic-A P0 (Leader)"]
T1P2F["Topic-A P2 (Follower)"]
end
subgraph Broker_1 [Broker 1]
T1P1L["Topic-A P1 (Leader)"]
T1P0F["Topic-A P0 (Follower)"]
end
subgraph Broker_2 [Broker 2]
T1P2L["Topic-A P2 (Leader)"]
T1P1F["Topic-A P1 (Follower)"]
end
end
subgraph External [集群协调]
ZK((ZooKeeper / KRaft))
end
subgraph Consumer_Group_G0 [Java 消费者服务组 - Group G0]
direction TB
subgraph Service_Instance_0 [Service Instance 0]
C0[Consumer Thread 0]
end
subgraph Service_Instance_1 [Service Instance 1]
C1[Consumer Thread 1]
C2[Consumer Thread 2]
end
end
%% 生产者流向
P0 -->|Key: User_A| T1P0L
P1 -->|Key: User_B| T1P1L
%% 副本同步 (ISR 机制)
T1P0L -.->|Sync| T1P0F
T1P1L -.->|Sync| T1P1F
T1P2L -.->|Sync| T1P2F
%% 消费者拉取 (Fetch)
T1P0L ===>|Fetch| C0
T1P1L ===>|Fetch| C1
T1P2L ===>|Fetch| C2
%% 协调关系
ZK --- Broker_0
ZK --- Broker_1
ZK --- Broker_2 注意:Kafka 2.8+ 引入 KRaft 模式,用内置的 Raft 协议替代 ZooKeeper,Kafka 3.x 已完全支持无 ZooKeeper 部署。
架构核心要点¶
| 组件 | 职责 | 说明 |
|---|---|---|
| Producer | 消息生产者 | 将消息写入指定 Topic 的 Partition |
| Broker | Kafka 服务节点 | 存储分区数据,处理读写请求 |
| Topic | 消息主题 | 消息的逻辑分类,由多个 Partition 组成 |
| Partition | 分区 | Topic 的物理分片,是并行度的基本单位 |
| Leader/Follower | 主副本/从副本 | Leader 处理读写,Follower 同步数据 |
| Consumer Group | 消费者组 | 组内消费者共同消费 Topic,每个分区只被一个消费者消费 |
| ZooKeeper/KRaft | 元数据管理 | 存储集群元数据,负责 Controller 选举 |
数据流向¶
- 写入:Producer 只写 Leader Partition,Follower 异步同步
- 消费:Consumer 从 Leader Partition 拉取数据(Pull 模式)
- 副本:Follower 持续从 Leader 同步,保证高可用