会用 Kafka 和懂 Kafka 是两个层次。Producer 发送经过哪些组件?Consumer Group 怎么做 Rebalance?ISR 到底怎么保证数据不丢?从源码级别彻底讲透。
一、Producer 发送流程
1.1 完整流程
用户调用 producer.send(record)
│
▼
┌──────────────┐
│ Interceptors │ ← 拦截器链(onSend)
└──────┬───────┘
▼
┌──────────────┐
│ Serializer │ ← Key/Value 序列化
└──────┬───────┘
▼
┌──────────────┐
│ Partitioner │ ← 分区选择
└──────┬───────┘
▼
┌──────────────┐
│ RecordAccumulator │ ← 消息累加器(按分区组织 Batch)
│ ┌──────────────┐ │
│ │ Partition 0 │ │
│ │ [batch1][batch2]│
│ │ Partition 1 │ │
│ │ [batch1] │ │
│ └──────────────┘ │
└──────┬───────────┘
▼
┌──────────────┐
│ Sender 线程 │ ← 后台线程,从累加器拉取 Batch
└──────┬───────┘
▼
┌──────────────┐
│ NetworkClient │ ← NIO 网络发送
└──────┬───────┘
▼
┌──────────────┐
│ Broker │ ← Kafka 服务器
└──────────────┘
│
▼
┌──────────────┐
│ Interceptors │ ← onAcknowledgement(收到 ACK 后)
└──────────────┘
2026/7/3大约 7 分钟