【kafka】基本概念

一个很有用的参考视频
另一个很有用的参考视频

一、基础组件

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,实现负载均衡。
相关推荐
柒.梧.3 小时前
MyBatis一对一关联查询深度解析:大实体类、SQL99联表、分布式查询实践
分布式·mybatis
Wang's Blog4 小时前
Kafka: Admin 客户端操作指南之主题管理与集群监控
分布式·kafka
源代码•宸4 小时前
goframe框架签到系统项目开发(用户认证、基于 JWT 实现认证、携带access token获取用户信息)
服务器·开发语言·网络·分布式·后端·golang·jwt
前端世界4 小时前
别只测功能:一套可落地的鸿蒙分布式压力测试方案
分布式·压力测试·harmonyos
Wang's Blog4 小时前
Kafka: AdminClient 核心操作详解之Topic 信息查询、配置修改与分区管理
分布式·kafka
Mr.朱鹏5 小时前
分布式接口幂等性实战指南【完整版】
java·spring boot·分布式·sql·spring·云原生·幂等
思成Codes5 小时前
Gin.RouterGroup:分组、中间件与路径组合
中间件·gin
无泪无花月隐星沉5 小时前
uos server 1070e部署Hadoop
大数据·运维·服务器·hadoop·分布式·uos·国产化os
Wang's Blog5 小时前
RabbitMQ: 构建高可靠消息系统之定时重发、消费重试与死信告警全解析
分布式·rabbitmq