一、基础组件
Kafka 是分布式的发布 / 订阅消息队列 ,主打高吞吐、高可用、低延迟、持久化 ,核心定位是大数据实时流处理的消息中间件 ,也是流式计算的核心组件。所有概念围绕「高效传输海量消息」设计,先记住核心一句话:生产者发消息到主题,消费者从主题拉取消息,Broker 集群存储消息,ZooKeeper/KRaft 管理集群。
1 Producer(生产者)
- 消息发送方,负责将业务系统产生的消息推送到kafka的topic中。
- 支持
同步/异步发送消息,默认异步(性能更高)。 - 支持
消息分区指定:可以指定消息发往Topic的某一个partition,也可以通过分区器自动分配。 - 支持消息
重试、幂等、事务,保证消息发送的可靠性。
2 Consumer(消费者)
- 消息接收方,负责从kafka的Topic中拉取消息并消费处理。
- kafka采用
拉(pull)消息的模式(而非推模式),消费者主动拉取消息,可以自主控制消费速度,避免消息积压。 - 消费者
必须属于一个消费者组(Consumer Group),这是kafka负载均衡、消息分配的核心。
3 Broker(服务节点/服务器)
- kafka集群中的单个服务实例,一台服务器就是一个broker。
- 用于存储Topic的消息,接收生产者的消息写入、响应消费者的消息拉取。
- 集群中多个broker协同工作,实现分布式存储、负载均衡、故障容错。(生产环境中的broker至少三台,单broker仅用于测试)
4 Topic(主题)
- 消息的分类容器,是kafka消息的
逻辑存储单元,所有消息都必须归属于某一个Topic。(Topic就想数据库的表,消息就是表中的一行数据) - Topic是
逻辑概念,物理消息存储在Partition分区中 - 支持多生产者写入、多消费者订阅,一个
Topic可以多个消费者组同时消费。
5 Partition(分区)
- Topic的物理储存单元,一个Topic会被拆分成多个Partition,每个Partition是一个有序、不可变的消息日志文件
- 分区有序性:单个
Partition内的消息严格按照发送顺序存储,但是跨Partition无全局顺序(若需全局有序,Topic只能设1个Partition) - 分布式存储:一个Topic的不同Partition会均匀的分配到集群的不同Broker上,实现负载均衡
- 并发消费:Partition是kafka的
消费并发最小单位,一个消费组内的消费者数小于等于该Topic的Partition数(否则多余消费者空闲)
6 Replica(副本)
- 为了保证消费不丢失,Kafka为每个Partition创建多个副本,分为主副本和从副本
- Leader(主副本):对外提供
读写服务,生产者写消息、消费者读消息,全部操作leader副本; - Follower(从副本):仅
同步Leader副本的数据,不提供读写服务,当Leader所在的Broker故障时,Kafka会从Follower中选举新的Leader,保证服务不中断。 - 实现数据高可用,副本数越多,容错能力越强;一个Partition的所有副本不会存放在同一个Broker(避免单点故障)
7 Consumer Group(消费者组)
- 多个消费者组成的
消费集群,是Kafka独有的核心概念,用于实现消息的负载均衡和消费幂等。 - 消费分配:一个Topic的Partition。只能
被同一个消费组内的一个消费者消费;同一个消费者组的多个消费者,分摊消费该Topic的所有Partition - 独立消费:不同消费组之间相互独立,可同时消费同一个Topic的消息(相当于多份消息副本,各消费组按需消费)------(类比:消费组像「一个团队」,Topic 的 Partition 是「任务」,团队内成员分摊任务(一人做一个);多个团队可同时做同一批任务。)
8 offset(偏移量)
- Partition中
每条消息的唯一序号,是一个单调递增的整数,用来标记在Partition中的位置 - 标记消费位置:消费者消费完一条消息后,会记录该消息的Offset,下一次消费从下一个Offset拉取
- 消息回溯:可手动修改 Offset,实现「消息重放 / 回溯」(比如消费失败后,回滚 Offset 重新消费)。偏移量存储:Kafka 0.9 版本后,Offset 不再存在 ZooKeeper,而是存储在 Kafka 内置的 Topic(__consumer_offsets) 中。
二、核心运维/架构概念
1 ISR(In-Sync Replica,同步副本集)
- 与 Leader 副本数据保持同步的所有副本(含 Leader)的集合,只有 ISR 中的副本,才有资格被选举为新的 Leader。
- Follower 副本若长时间未同步 Leader 数据(超时,默认 10s),会被踢出 ISR 集合;恢复同步后,重新加入;
- 当 Leader 故障时,Kafka 仅从 ISR 中选举新 Leader,保证数据一致性。
2 AR/OSR(拓展)
- AR(Assigned Replicas):Partition 的所有副本集合(Leader + 所有 Follower);
- OSR(Out-of-Sync Replica):与 Leader 副本数据不同步的副本,即 AR - ISR。
3 ZooKeeper/KRaft(集群协调者)
- 管理 Kafka 集群的元数据,包括:Broker 节点状态、Topic/Partition 配置、Leader 副本选举、消费组 Offset 管理等。
- ZooKeeper 模式:早期 Kafka 依赖 ZooKeeper,需独立部署 ZK 集群;
- KRaft 模式:Kafka 2.8 版本推出的
无 ZK 模式,用 Kafka 自身的 KRaft 协议替代 ZK,简化部署架构,目前已是生产主流。
4 Record(记录)
- Kafka 中
最小的数据单元,即生产者发送、消费者接收的「一条数据」,也叫 Message。一条 Record 包含 Key(键)、Value(值,核心业务数据)、Timestamp(时间戳)等字段。 - Key:用于
分区路由,相同 Key 的消息会被发送到同一个 Partition,保证同 Key 消息的消费顺序; - Value:真正的业务数据(如 JSON 字符串、二进制数据)。
5 Segement(段)
- 为避免单个 Partition 的日志文件过大,Kafka 将 Partition 拆分为
多个大小固定的 Segment 文件(默认 1GB),每个 Segment 对应一个日志文件和索引文件。 优化文件读写性能,查询某 Offset 的消息时,先通过索引文件定位到对应 Segment,再读取日志文件,大幅提升查询效率。
三、核心特性相关概念
1 消息的投递语义
Kafka 针对「生产者发送」和「消费者消费」,提供 3 种投递语义,生产环境按需选择:
- At most once(最多一次):消息可能丢失,
不会重复消费;(性能最高,可靠性最低) - At least once(至少一次):消息
不会丢失,但可能重复消费;(生产最常用,需消费端做幂等) - Exactly once(恰好一次):消息
不丢失、不重复;(可靠性最高,实现复杂,适用于金融等严格场景)
2 消息的留存策略
Kafka 会持久化存储消息,并非消费后立即删除,即使消费者离线,重启后仍可消费离线期间的消息(只要未被清理)。支持 2 类留存策略(可配置):
- 按时间留存:默认
7 天,超过时间自动删除消息; - 按大小留存:Partition 的日志文件达到指定大小,删除最早的 Segment。
3 分区策略
生产者发送消息时,决定消息发往 Topic 哪个 Partition 的规则,核心 3 种:
指定分区:生产者手动指定 Partition,精准路由;按 Key 哈希:对消息 Key 做哈希运算,映射到固定 Partition,保证同 Key 消息有序;轮询策略:默认策略,无 Key 时,消息均匀分配到所有 Partition,实现负载均衡。