乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 消息队列与 Kafka 概述

    • 章节导读
    • 消息队列基础
    • Kafka 概述
    • Kafka 为什么快
  • 第2章 快速上手:单机环境搭建

    • 章节导读
    • 环境准备与安装
    • 快速启动
    • Topic 管理
  • 第3章 核心概念:主题、分区与日志

    • 章节导读
    • Topic
    • Partition
    • Offset
    • Segment 与存储结构
  • 第4章 生产者详解

    • 章节导读
    • Producer 概述
    • Producer 发送机制
    • Producer 分区策略
    • Producer 幂等与事务
    • Producer 配置
  • 第5章 消费者与消费组

    • 章节导读
    • Consumer 概述
    • Consumer Group 消费组
    • Consumer 分区分配策略
    • Consumer Offset 提交
    • Consumer 多线程
    • Consumer 配置
  • 第6章 Broker 与控制器

    • 章节导读
    • Broker 概述
    • Broker 配置
    • Controller
    • KRaft 共识协议
  • 第7章 副本与数据可靠性

    • 章节导读
    • 副本机制
    • ISR 与副本同步
    • Leader 选举
    • ACK 与一致性保证
    • 高水位与 Leader Epoch
  • 第8章 存储与性能优化

    • 章节导读
    • 存储架构
    • 日志清理与压缩
    • Page Cache 与零拷贝
    • Producer 性能优化
    • Consumer 性能优化
    • Broker 性能优化
  • 第9章 生产环境运维与监控

    • 章节导读
    • Topic 管理
    • Kafka 运维工具
    • 监控
    • 常见故障排查
  • 第10章 Kafka生态与面试考点

    • 章节导读
    • Kafka 生态全景
    • 面试高频 30 题

面试高频 30 题

使用说明

本题集覆盖校招和社招中 Apache Kafka 的高频考点。每道题标注星级(★ 基础 / ★★ 进阶 / ★★★ 专家),★★★ 题代表候选人具备生产级 Kafka 经验。


基础概念(★★★ 高频)

1. Kafka 是什么?为什么叫"分布式流处理平台"?★

答题要点:Kafka 不是单纯的消息队列,是以 Append-Only Log 为核心的分布式、分区化、多副本的流处理平台。三个核心能力:消息发布订阅(Pub/Sub)、持久化存储、流处理。


2. Topic 和 Partition 的关系?为什么需要分区?★

答题要点:Topic 是逻辑概念,Partition 是物理存储单元。分区是为了并行:并行写入(多个 Producer 写不同分区)、并行存储(多 Broker 分布存储)、并行消费(同消费组内 Consumer 并行消费)。


3. Kafka 如何保证消息顺序?★★

答题要点:分区内严格顺序。全局顺序需单分区 + max.in.flight.requests.per.connection=1 + enable.idempotence=true。多分区无法保证全局顺序。


4. 什么是 ISR?为什么需要 ISR 机制?★★

答题要点:In-Sync Replicas——与 Leader 保持同步的副本集合。ISR 提供动态权衡:副本同步延迟在 replica.lag.time.max.ms 内即保持在 ISR。避免少数慢副本阻塞所有写入。


生产者(★★ 适中)

5. Producer 发送消息的完整流程?★

答题要点:send() → Serializer → Partitioner → RecordAccumulator → Sender 线程 → Broker。两个独立线程:应用线程负责前 3 步,Sender 线程负责网络发送。


6. acks=all 一定不丢数据吗?★★

答题要点:不保证。陷阱:min.insync.replicas=1 时 acks=all 退化为 acks=1;所有 ISR 磁盘同时损坏时仍然丢。需要最小存活 ISR 数 > 1 + 磁盘容灾。


7. 幂等性 Producer 的原理?★★

答题要点:给每个 Producer 分配 Producer ID,每条消息带 <PID, SequenceNumber>。Broker 对每个 Partition 记录最近 5 个 SeqNum,检测重复后丢弃。


8. Producer 的重试机制如何导致消息重复?★★

答题要点:Broker 已写入但 ACK 网络丢失 → Producer 重试 → 消息被写入两次。解决方案:enable.idempotence=true(幂等去重)或 transactional.id(事务)。


消费者(★★ 适中)

9. Consumer Group 中的 Rebalance 是什么?触发时机?★

答题要点:消费组内分区重新分配的过程。触发:Consumer 加入/离开、分区数变更、Topic 被订阅/取消订阅。Rebalance 期间消费组暂停消费。


10. Range 和 RoundRobin 分配策略的区别?★

答题要点:Range 按分区号范围分配(可能导致数据倾斜);RoundRobin 轮询分配(均匀,但所有 Consumer 必须订阅相同 Topic)。3.x 推荐 Cooperative Sticky(增量重分配)。


11. 自动提交和手动提交 Offset 的选择?★

答题要点:自动提交(enable.auto.commit=true)可能漏消费(提交后还没处理就崩溃)。手动提交能精确控制 at-least-once。生产环境推荐手动提交。


12. Consumer 多线程消费模型有哪些?★★

答题要点:① 多 Consumer 实例(最简单);② 单 Consumer + 多 Worker 线程(注意 Offset 提交顺序);③ 按分区手动分配 + 独占线程(最灵活,但失去 Rebalance 自动管理)。


Broker 与副本(★★★ 高频)

13. Controller 的作用?KRaft 模式与 Zookeeper 模式的区别?★★

答题要点:Controller 管理分区 Leader 选举、Broker 上下线、元数据分发。KRaft 模式用 Raft 共识替代 ZK,部署简化 + 元数据一致性强 + 支持百万分区级别。


14. Kafka 如何选举新 Leader?★★

答题要点:从该分区的 ISR 中选一个。优先选 AR 列表中的第一个(Preferred Leader)。unclean.leader.election.enable=true 时允许选非 ISR 副本(有丢数据风险)。


15. HW(High Watermark)和 LEO(Log End Offset)的作用?★★★

答题要点:HW 是消费者可见的最大 Offset(所有 ISR 副本都已确认);LEO 是副本的下一条消息 Offset。HW ≤ LEO。Leader 故障后,新 Leader 的 HW 保证不丢失已提交消息。


16. Leader Epoch 解决什么问题?★★★

答题要点:解决旧 Leader 恢复后的日志截断判断问题。每个 Leader 任期有一个 Epoch,Follower 同步时带上 Epoch → Leader 知道哪些消息在哪个 Epoch 开始写入 → 避免误截断已提交消息。


存储与性能(★★★ 高频)

17. Kafka 为什么这么快?★★

答题要点:① 顺序 I/O(追加写);② 零拷贝(sendfile);③ Page Cache 依赖(不维护应用层缓存);④ 批量+压缩(网络效率);⑤ 分区并行。


18. Segment 是什么?为什么需要 Segment?★

答题要点:Partition 的物理存储单元,按大小或时间切分。好处:方便过期删除(整段删除)、方便定位(二分查找+稀疏索引)、避免单文件过大。


19. Log Compaction 和 Log Deletion 的区别?★★

答题要点:Deletion 按时间/大小删除(适合流数据);Compaction 保留每个 Key 的最新值(适合状态数据)。Compact 不影响 Consumer 读取现有消息。


20. 零拷贝(Zero Copy)的原理?★★

答题要点:sendfile() 系统调用 → 数据从 Page Cache 直接 DMA 到网卡,不走用户态,减少 2 次 CPU 拷贝和 2 次上下文切换。


运维(★★★ 高频)

21. 如何监控 Kafka?核心指标是什么?★

答题要点:UnderReplicatedPartitions、ActiveControllerCount、Consumer Group Lag、磁盘使用率、请求延迟 P99。使用 JMX + Prometheus + Grafana。


22. 消费 Lag 飙升如何排查?★★

答题要点:① 确认 Lag 是否集中在某几个分区(分区倾斜或单 Consumer 慢);② 检查 Consumer 是否存活(频繁 Rebalance?);③ 检查 Consumer 处理速度(max.poll.records 太大?处理逻辑慢?);④ Producer 写入是否突增。


23. 分区数如何确定?★★

答题要点:分区数 = max(目标吞吐 / 单分区吞吐, Consumer 数量)。单分区上限 ~10-20 MB/s(根据硬件)。经验:先设 12-24,上线后根据监控调整。


24. unclean.leader.election.enable 开还是关?★★

答题要点:强烈建议 false(生产默认)。开启意味着"宁可丢数据也不让分区不可用"。除非是日志类容忍数据丢失的场景,否则永远关闭。


事务与 Exactly-Once(★★★ 专家级)

25. Kafka 事务的保证范围?★★★

答题要点:原子写入多分区 + Consumer 的 "read- process-write" 原子性。但不跨外部系统(数据库 + Kafka 一起不能算一个事务)。


26. Exactly-Once 语义(EOS)如何实现?★★★

答题要点:Power=幂等(单分区去重)+ Transactions(跨分区原子性)+ Consumer 的 read_committed 模式(只读已提交的事务消息)。本质是 at-least-once + 去重 = effectively exactly-once。


架构设计(★★★ 专家级)

27. 如何保证 Kafka 集群的高可用?★★

答题要点:① replication.factor ≥ 3;② min.insync.replicas ≥ 2;③ Controller 冗余(KRaft 3 节点起);④ 跨机架/可用区部署;⑤ MirrorMaker 2 跨集群容灾。


28. Kafka 的"数据回滚"能力体现在哪?★★

答题要点:(由于副本同步未完全确认时 Leader 故障)新 Leader 可能截断旧 Leader 未完全同步的日志。Leader Epoch 机制在 KRaft 模式下防止回滚到错误状态。消费者通过 Offset 重置可以回溯消费。


29. 为什么不把消息直接发给 Consumer,而是要经过 Broker?★

答题要点:解耦 → 生产者不知道消费者是谁;持久化 → 消费者离线时消息不丢;多订阅 → 多个消费组独立消费同一数据流;削峰填谷 → 消费速率不必匹配生产速率。


30. 如果让你设计一个类似 Kafka 的系统,你会关注哪些点?★★★

答题要点:① 存储引擎:顺序追加 + 分段;② 分区模型:水平扩展;③ 副本协议:ISR vs Quorum;④ 元数据:一致性协议(Raft);⑤ 网络 I/O:零拷贝 + 批量;⑥ 消费者模型:Pull + Offset 管理。核心权衡:可靠性与延迟、一致性与可用性。

上一页
Kafka 生态全景