Kafka09-速答-尚硅谷

6-Kafka速答

### 文章目录

  • [6-Kafka速答](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [@[toc]](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.1 Kafka 核心组件](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.2 偏移量三剑客](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.3 Controller 选举(ZK 模式)](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.4 副本集合](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.5 Producer 发送流程(简)](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.6 ACK 应答策略](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.7 消息重复 & 丢失根因](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.8 Follower 拉取 Leader](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.9 Consumer 拉取消息](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.10 消费者重复 / 丢失](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)
  • [6.11 全局有序保证](#文章目录 6-Kafka速答 @[toc] 6.1 Kafka 核心组件 6.2 偏移量三剑客 6.3 Controller 选举(ZK 模式) 6.4 副本集合 6.5 Producer 发送流程(简) 6.6 ACK 应答策略 6.7 消息重复 & 丢失根因 6.8 Follower 拉取 Leader 6.9 Consumer 拉取消息 6.10 消费者重复 / 丢失 6.11 全局有序保证)

6.1 Kafka 核心组件

  • Broker:Kafka 服务器进程
  • Topic:逻辑消息队列
  • Partition:Topic 物理分片
  • Replica:分区副本
  • Leader / Follower:副本角色
  • Controller:集群"总管" Broker
  • ZK:旧版依赖 ZooKeeper 选举 Controller
  • Producer / Consumer / Consumer Group:生产与消费端

6.2 偏移量三剑客

缩写 全称 含义 可见性
LSO Log Start / Stable Offset ① 日志文件起始偏移量(文件名数字)<br>② 事务隔离级别可见性边界(read_committed 用) 事务型消费者
LEO Log End Offset 当前分区下一条待写入位置 内部使用
HW High Watermark 消费者可见"高水位",< HW 的数据才允许被消费 所有消费者

6.3 Controller 选举(ZK 模式)

  1. 所有 Broker 监听 /controller 临时节点
  2. 谁创建成功谁当选;节点消失即触发重新选举
  3. 纪元(epoch)+1,防止脑裂

6.4 副本集合

  • AR = Assigned Replicas:分区全部副本
  • ISR = In-Sync Replicas:正在同步的副本(含 Leader),满足 replica.lag.time.max.ms
  • OSR = Out-of-Sync Replicas:落后副本
  • 动态伸缩:副本达标从 OSR→ISR,落后从 ISR→OSR

6.5 Producer 发送流程(简)

  1. 序列化 → 分区器选分区 → 累加器缓存
  2. Sender 线程批量发送 → 对应分区 Leader
  3. 等待 ACK → 更新元数据 / 重试

6.6 ACK 应答策略

acks 含义 吞吐 可靠性
0 发到网络缓冲区即返回
1 Leader 写盘即返回
-1/all ISR 全部写盘才返回 高(默认)

> 幂等 / 事务必须 acks=-1 且开启重试


6.7 消息重复 & 丢失根因

  • 丢失:禁重试 + 网络异常 / Leader 宕机
  • 重复:重试时网络抖动导致重复发送
  • 解决
    • 会话内重复:开启幂等(enable.idempotence=true)
    • 跨会话重复:使用事务 Producer

6.8 Follower 拉取 Leader

Follower 周期性发送 FetchRequest(携带当前 LEO)→ Leader 按 HW 截断数据返回 → Follower 写盘 → 更新自身 LEO → Leader 更新 HW


6.9 Consumer 拉取消息

Consumer 发送 FetchRequest(携带 offset)→ Broker 按 offset 顺序读日志 → 返回消息 → 本地处理 → 定时(或手动)提交 offset


6.10 消费者重复 / 丢失

  • 重复:自动提交间隔内崩溃,重启后从上次已提交 offset 重新消费
  • 丢失:已提交 offset 但消息未处理完即崩溃
  • 对策
    • 手动同步 commitSync / 异步 commitAsync
    • 消费-处理-提交原子化(幂等处理或事务)

6.11 全局有序保证

  1. 生产有序
    • 单分区 + 序列号 + 在途请求缓冲区 ≤5
  2. 存储有序
    • 同一分区顺序追加写日志
  3. 消费有序
    • 单分区仅被组内一个消费者按 offset 顺序读取
      > 多分区无法保证全局有序,只能分区内有序
相关推荐
架构师老Y12 小时前
011、消息队列应用:RabbitMQ、Kafka与Celery
python·架构·kafka·rabbitmq·ruby
talen_hx29616 小时前
《kafka核心源码解读》学习笔记 Day 02
笔记·学习·kafka
lifallen16 小时前
如何保证 Kafka 的消息顺序性?
java·大数据·分布式·kafka
真实的菜16 小时前
Kafka 2.x vs 3.x,我为什么选择升级?
kafka
时光追逐者16 小时前
分享四款开源且实用的 Kafka 管理工具
分布式·kafka·开源
Rick199317 小时前
rabbitmq, rocketmq, kafka这三种消息如何分别保住可靠性,顺序性,以及应用场景?
kafka·rabbitmq·rocketmq
☞遠航☜19 小时前
kafka快速上手
分布式·kafka·linq
工具罗某人1 天前
docker compose部署kafka集群搭建
docker·容器·kafka
qq_297574672 天前
【Kafka 系列・入门第六篇】Kafka 集群部署(3 节点)+ 负载均衡配置
分布式·kafka·负载均衡