本质上还是各个消费组各干各的,互不影响;同一个组里按 partition 分活。
架构
Key Components:
═══════════════════════════════════════════════════════════════════
• Broker: 存储和转发消息的服务节点
• Topic: 消息主题,逻辑上的消息分类
• Partition: 主题的物理分片,支持并行处理
• Producer: 消息生产者,向Kafka发送消息
• Consumer: 消息消费者,从Kafka读取消息
• Consumer Group: 消费者组,实现负载均衡
• ZooKeeper: 协调服务,管理集群元数据
• Leader/Follower: 分区副本角色,保证高可用
Key Points:
═══════════════════════════════════════════════════════════════════
• Leader均匀分布:每个Broker都承担部分Partition的Leader角色
• 负载均衡:避免单个Broker承担过多Leader压力
• 高可用:每个Partition都有多个副本分布在不同Broker
• 故障转移:Leader故障时,Follower可以接管
Kafka Cluster Architecture
┌─────────────────────────────────────────────────────────────────┐
│ Kafka Cluster │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Broker-1 │ │ Broker-2 │ │ Broker-3 │ │
│ │ │ │ │ │ │ │
│ │ Topic-A-P0 │ │ Topic-A-P1 │ │ Topic-A-P2 │ │
│ │ (Leader) │ │ (Leader) │ │ (Leader) │ │
│ │ │ │ │ │ │ │
│ │ Topic-B-P1 │ │ Topic-B-P2 │ │ Topic-B-P0 │ │
│ │ (Follower) │ │ (Follower) │ │ (Leader) │ │
│ │ │ │ │ │ │ │
│ │ Topic-A-P1 │ │ Topic-A-P2 │ │ Topic-A-P0 │ │
│ │ (Follower) │ │ (Follower) │ │ (Follower) │ │
│ │ │ │ │ │ │ │
│ │ Topic-B-P2 │ │ Topic-B-P0 │ │ Topic-B-P1 │ │
│ │ (Follower) │ │ (Follower) │ │ (Leader) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
└─────────┼───────────────────┼───────────────────┼──────────────┘
│ │ │
└───────────────────┼───────────────────┘
│
┌─────────────────────────────┼─────────────────────────────┐
│ ZooKeeper Ensemble │
│ │ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ ZK-1 │────│ ZK-2 │────│ ZK-3 │ │
│ │ │ │ │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────┘
Producers Consumer Groups
┌─────────────┐ ┌─────────────────┐
│ Producer-1 │ │ Consumer Group-1│
│ │ │ │
│ ┌─────────┐ │ ──────────────────────▶ │ ┌─────────────┐ │
│ │ App-A │ │ │ │ Consumer-1 │ │
│ └─────────┘ │ │ └─────────────┘ │
└─────────────┘ │ │
│ │ ┌─────────────┐ │
│ │ │ Consumer-2 │ │
▼ │ └─────────────┘ │
┌─────────────┐ └─────────────────┘
│ Producer-2 │ │
│ │ │
│ ┌─────────┐ │ ──────────────────────▶ ▼
│ │ App-B │ │ ┌─────────────────┐
│ └─────────┘ │ │ Consumer Group-2│
└─────────────┘ │ │
│ ┌─────────────┐ │
│ │ Consumer-3 │ │
│ └─────────────┘ │
└─────────────────┘
Leader Distribution (正确的分布):
═══════════════════════════════════════════════════════════════════
Broker-1: Topic-A-P0 (Leader) Topic-B-P1 (Follower)
Broker-2: Topic-A-P1 (Leader) Topic-B-P2 (Follower)
Broker-3: Topic-A-P2 (Leader) Topic-B-P0 (Leader)
Broker-1: Topic-A-P1 (Follower) Topic-B-P2 (Follower)
Broker-2: Topic-A-P2 (Follower) Topic-B-P0 (Follower)
Broker-3: Topic-A-P0 (Follower) Topic-B-P1 (Leader)
Data Flow:
═══════════════════════════════════════════════════════════════════
1. Producer → Broker (Write to Leaders)
Producer-1 ──────▶ Topic-A-P0 (Broker-1), Topic-A-P1 (Broker-2), Topic-A-P2 (Broker-3)
Producer-2 ──────▶ Topic-B-P0 (Broker-3), Topic-B-P1 (Broker-3), Topic-B-P2 (Broker-2)
2. Replication (Leader → Followers)
Topic-A-P0 (Broker-1) ┄┄┄▶ Topic-A-P0 (Broker-3)
Topic-A-P1 (Broker-2) ┄┄┄▶ Topic-A-P1 (Broker-1)
Topic-A-P2 (Broker-3) ┄┄┄▶ Topic-A-P2 (Broker-2)
Topic-B-P0 (Broker-3) ┄┄┄▶ Topic-B-P0 (Broker-2)
Topic-B-P1 (Broker-3) ┄┄┄▶ Topic-B-P1 (Broker-1)
Topic-B-P2 (Broker-2) ┄┄┄▶ Topic-B-P2 (Broker-1)
3. Consumer ← Broker (Read from Leaders)
Consumer-1 ◀────── Topic-A-P0 (Broker-1), Topic-A-P1 (Broker-2)
Consumer-2 ◀────── Topic-A-P2 (Broker-3)
Consumer-3 ◀────── Topic-B-P0 (Broker-3), Topic-B-P1 (Broker-3), Topic-B-P2 (Broker-2)