基本概念

101 阅读4分钟

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. 分区与并行性

  • 分区数量:决定生产/消费的并行度,分区越多,吞吐量越高。

  • 分区策略

    • 轮询(Round Robin) :均匀分配消息到各分区。
    • 哈希(Key Hashing) :相同 Key 的消息写入同一分区,保证顺序性。
    • 自定义分区器:根据业务逻辑自定义分区规则。

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.factorTopic 的副本数(推荐 ≥3)。
min.insync.replicas生产者写入时要求的最小 ISR 副本数(如 2)。
log.retention.hours日志保留时间(默认 7 天)。
num.partitions创建 Topic 时的默认分区数。
auto.offset.reset消费者无有效 Offset 时的策略(earliestlatest)。

六、生态系统组件

组件用途
Kafka Connect与外部系统(如数据库、Hadoop)集成,支持数据导入/导出。
Kafka Streams轻量级流处理库,支持实时数据转换、聚合、窗口计算。
Schema Registry管理消息的 Schema(如 Avro、Protobuf),保障数据格式兼容性。
Kafka MirrorMaker跨集群数据复制工具,用于多数据中心同步。