Apache Kafka 基本概念全解析
Apache Kafka 是一个分布式流处理平台,其核心设计围绕高吞吐、低延迟和容错性展开。以下是 Kafka 的核心概念及其详细说明,涵盖基础组件、消息机制、高可用设计及生态系统工具
一、核心组件
| 概念 | 说明 |
|---|
| Producer(生产者) | 向 Kafka 的 Topic 发送消息,支持异步/同步发送、批量提交、分区策略(轮询、哈希、自定义)。 |
| Consumer(消费者) | 从 Topic 订阅并消费消息,按消费者组(Consumer Group)组织,组内消费者共享分区消息。 |
| Broker(代理) | Kafka 集群中的服务节点,负责存储消息、处理读写请求,多个 Broker 构成集群。 |
| Topic(主题) | 消息的逻辑分类单元(类似数据库的表),生产者向 Topic 写消息,消费者从 Topic 读消息。 |
| Partition(分区) | Topic 的物理分片,每个分区是一个有序、不可变的消息队列,支持并行处理。 |
| Offset(偏移量) | 分区内每条消息的唯一递增序号,消费者通过 Offset 记录消费进度。 |
| Replica(副本) | 分区的副本,包含 Leader(处理读写)和 Follower(异步/同步复制数据)。 |
二、消息传递机制
1. 分区与并行性
2. 副本机制(Replication)
| 概念 | 说明 |
|---|
| Leader | 处理分区的读写请求,维护 ISR(In-Sync Replicas)列表。 |
| Follower | 从 Leader 异步/同步复制数据,故障时可能晋升为 Leader。 |
| ISR(同步副本集合) | 与 Leader 数据同步的副本列表,用于保障数据一致性。 |
| ACK 机制 | 生产者可配置 acks=0/1/all,控制消息持久化的可靠性等级。 |
3. 消费者组(Consumer Group)
| 特性 | 说明 |
|---|
| 组内负载均衡 | 组内每个消费者负责消费一个或多个分区的消息,避免重复消费。 |
| 重平衡(Rebalance) | 消费者加入或离开组时,Kafka 自动重新分配分区,保证负载均衡。 |
| Offset 提交 | 消费者定期提交消费进度(支持自动提交或手动提交)。 |
三、高可用与容错机制
1. Leader 选举
- Controller:集群中唯一的协调者,负责 Leader 选举、Broker 上下线处理(依赖 ZooKeeper 或 KRaft 协议)。
- 选举触发条件:Leader 副本宕机、网络分区或手动触发。
2. 数据一致性保障
| 概念 | 说明 |
|---|
| HW(高水位) | 已成功复制到所有 ISR 副本的最高 Offset,消费者只能读取到 HW 之前的消息。 |
| LEO(日志末端位移) | 当前日志最后一条消息的 Offset,表示下一个写入位置。 |
| Exactly-Once 语义 | 通过事务和幂等生产者实现消息不重不丢(需配置 enable.idempotence=true)。 |
3. 故障恢复
- Follower 同步滞后:若 Follower 长时间未同步,会被移出 ISR。
- 数据恢复:宕机副本恢复后,从 Leader 同步缺失数据,重新加入 ISR。
四、存储与索引设计
| 概念 | 说明 |
|---|
| Segment(日志段) | 分区日志被拆分为多个段文件(如 00000000000000000000.log),按大小或时间滚动。 |
| 位移索引(.index) | 记录 Offset 到物理位置的映射,加速消息定位。 |
| 时间戳索引(.timeindex) | 记录时间戳到 Offset 的映射,支持按时间范围查询。 |
| 零拷贝(Zero-Copy) | 通过 sendfile 系统调用,数据从磁盘直接传输到网络,减少 CPU 和内存开销。 |
五、关键配置参数
| 参数 | 作用 |
|---|
replication.factor | Topic 的副本数(推荐 ≥3)。 |
min.insync.replicas | 生产者写入时要求的最小 ISR 副本数(如 2)。 |
log.retention.hours | 日志保留时间(默认 7 天)。 |
num.partitions | 创建 Topic 时的默认分区数。 |
auto.offset.reset | 消费者无有效 Offset 时的策略(earliest 或 latest)。 |
六、生态系统组件
| 组件 | 用途 |
|---|
| Kafka Connect | 与外部系统(如数据库、Hadoop)集成,支持数据导入/导出。 |
| Kafka Streams | 轻量级流处理库,支持实时数据转换、聚合、窗口计算。 |
| Schema Registry | 管理消息的 Schema(如 Avro、Protobuf),保障数据格式兼容性。 |
| Kafka MirrorMaker | 跨集群数据复制工具,用于多数据中心同步。 |