什么是 Kafka?核心设计目标是什么?
答:Kafka 是分布式流处理平台,核心设计目标为 高吞吐、低延迟、高扩展性。采用发布-订阅模型,适用于实时数据管道、流处理等场景。
Kafka 核心组件有哪些?
答:
为什么 Kafka 需要 Partition?
答:
Kafka 如何保证消息持久化?
答:
Producer 发送消息如何保证不丢失?
答:
acks=all
:要求所有 ISR(In-Sync Replicas)副本确认写入。retries
(重试机制)应对网络抖动。buffer.memory
和 max.block.ms
。Producer 的异步发送和同步发送区别?
答:
batch.size
控制),高吞吐但需处理回调确认成功。Consumer 的 Rebalance 是什么?触发条件?
答:
如何避免 Consumer 重复消费?
答:
enable.auto.commit=false
),处理完业务后提交。Exactly-Once
语义(需 v0.11+)。Kafka 如何实现高可用?
答:
unclean.leader.election.enable
控制是否允许非 ISR 副本成为 Leader(可能丢数据)。HW(高水位)和 LEO(Log End Offset)的区别?
答:
Kafka 如何实现 Exactly-Once 语义?
答:
如何提升 Kafka 吞吐量?
答:
batch.size
)、压缩(compression.type
)、异步发送。fetch.min.bytes
。num.io.threads
。Kafka 如何保证消息顺序性?
答:
遇到消息积压(Lag)如何处理?
答:
Kafka Streams 和 Flink 的区别?
答:
Kafka Connect 的作用?
答:用于与其他系统(如 MySQL、HDFS)高效导入/导出数据,提供预置 Connector。
Kafka 消息过期机制?
答:
log.retention.hours
)或大小(log.retention.bytes
)删除旧 Segment。cleanup.policy=compact
),保留 Key 的最新值。设计一个秒杀系统,如何用 Kafka 削峰填谷?
答:
Kafka 如何实现百万级 TPS?
答:
Kafka 的 PageCache 与零拷贝(Zero-Copy)是如何提升性能的?
答:
sendfile
系统调用)。Kafka 副本同步过程中,如果 Follower 长时间未同步,Leader 如何处理?
答:
replica.lag.time.max.ms
未同步,会被踢出 ISR。unclean.leader.election.enable=false
,只有 ISR 中的副本可成为新 Leader,否则可能选择非 ISR 副本(导致数据丢失)。Kafka 的 Controller 是什么?故障后如何恢复?
答:
Kafka 日志分段(Segment)的底层结构是怎样的?
答:
0000000000.log
)。.index
(Offset 索引)和 .timeindex
(时间戳索引),通过二分查找快速定位消息。如果 Consumer 消费速度远慢于 Producer 生产速度,除了增加 Consumer,还有什么方案?
答:
如何设计一个 Kafka 集群监控系统?需要关注哪些指标?
答:
Kafka 与 RocketMQ 的核心区别是什么?如何选型?
答:
Kafka Producer 的 RecordAccumulator
是什么?如何工作?
答:
batch.size
或等待 linger.ms
时间后触发发送。Kafka 为什么选择自己实现 TCP 协议而不是用 HTTP?
答:
Kafka 的延迟操作(Delayed Operation)有哪些?举例说明其作用。
答:
DelayedProduce
(等待副本同步)、DelayedFetch
(等待足够数据)。发现 Kafka Broker 磁盘 IO 过高,如何排查?
答:
Consumer 频繁发生 Rebalance,可能是什么原因?如何解决?
答:
session.timeout.ms
)。session.timeout.ms
和 max.poll.interval.ms
。max.poll.records
)。如果让你设计一个分布式消息队列,会参考 Kafka 的哪些设计?改进哪些不足?
答:
如何用 Kafka 实现“延迟队列”(如订单30分钟未支付自动关闭)?
答:
KRaft 模式与 Zookeeper 模式的优劣对比?
答:
Kafka 3.0+ 版本有哪些重要更新?
答:
为什么 Kafka 不直接支持消息级别的延迟,而是需要外部实现?
答:
Kafka 的 ISR 机制可能导致脑裂问题吗?如何避免?
答:
Kafka 的 max.poll.records
和 fetch.max.bytes
有什么区别?设置不当会导致什么问题?
答:
max.poll.records
:单次 Poll 请求返回的最大消息数(默认 500)。fetch.max.bytes
:单次请求从 Broker 拉取的最大数据量(默认 50MB)。fetch.max.bytes
过小,可能导致多次网络请求;若 max.poll.records
过大,可能引发 Consumer 内存溢出。为什么 Kafka 的 Topic 分区数不是越多越好?
答:
Kafka 的 min.insync.replicas
参数有什么作用?如何影响可用性?
答:
min.insync.replicas=2
,当 ISR 副本数不足 2 时,Producer 会抛出 NotEnoughReplicasException
,在数据可靠性和可用性之间权衡。如何实现 Kafka 消息的“优先级队列”(如 VIP 用户消息优先处理)?
答:
Kafka 集群跨数据中心同步(如异地多活)有哪些方案?各有什么优缺点?
答:
Broker 的 JVM 内存如何合理分配?为什么不能分配过大?
答:
Kafka 的 Leader 选举算法是什么?和 ZAB/Raft 有什么区别?
答:
Kafka 的 Log
类如何管理 Segment 文件?删除过期数据的触发条件是什么?
答:
Log
维护活跃 Segment(当前写入)和只读 Segments,按时间或大小滚动切割。log.retention.{hours|bytes}
或日志压缩策略。Producer 的 linger.ms
和 batch.size
哪个优先级更高?
答:先达到阈值者触发发送。例如,若 linger.ms=100ms
,batch.size=32KB
:
如何为 Kafka 集群配置 SSL 加密和 SASL 认证?
答:
listeners=SSL://:9093
,生成 Keystore 和 Truststore。SASL_SSL
监听器。Kafka 的 ACL(访问控制列表)如何实现 Topic 级权限管理?
答:
启用 authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
。
使用 kafka-acls.sh
命令,如:
bin/kafka-acls.sh --add --allow-principal User:Alice --operation Read --topic TestTopic
如何安全地扩容 Kafka 集群?
答:
kafka-reassign-partitions.sh
迁移部分 Partition 到新 Broker。Spark Streaming 消费 Kafka 时,Direct API
和 Receiver API
有什么区别?
答:
如何将 Kafka 数据实时同步到 HDFS?
答:
Kafka 和 Debezium 如何实现 CDC(变更数据捕获)?
答:
若 Kafka 集群所有 Broker 同时宕机,恢复后如何保证数据一致性?
答:
设计一个 Kafka 消息轨迹(Trace)追踪系统,如何实现?
答:
为什么 Kafka 的 Consumer 不能像 RabbitMQ 那样“广播消息”给所有 Consumer?如何实现类似功能?
答:
如何动态调整 Kafka Topic 的分区数?调整后对生产者和消费者有何影响?
答:
kafka-topics.sh --alter --partitions <新分区数>
。Kafka 的 log.flush.interval.messages
和 log.flush.interval.ms
参数有什么区别?如何配置?
答:
log.flush.interval.messages
:累积多少条消息后强制刷盘(默认无限)。log.flush.interval.ms
:间隔多久强制刷盘(默认无限)。如何监控 Kafka 的 ISR 副本同步延迟?延迟过高如何解决?
答:
kafka.server:type=ReplicaManager,name=IsrShrinksPerSec
(ISR 收缩次数)。replica.fetch.max.bytes
和 replica.fetch.wait.max.ms
。若 Kafka 的某个 Partition 的所有副本(Leader + Followers)全部损坏,如何恢复数据?
答:
Kafka 的 delete.topic.enable=false
时,删除 Topic 会有什么现象?如何彻底清理?
答:
/brokers/topics/
节点。如何检测和处理 Kafka 中的“僵尸消息”(无限重试也无法处理的消息)?
答:
last.offset.committed
与 current.offset
差值长期不变。Kafka Schema Registry 的作用是什么?如何配合 Avro 使用?
答:
Kafka 的 Tiered Storage(分层存储)是什么?解决什么问题?
答:
如何用 Kafka 实现“事件溯源(Event Sourcing)”模式?
答:
如何对 Kafka 集群进行压力测试?需要关注哪些瓶颈点?
答:
kafka-producer-perf-test.sh
和 kafka-consumer-perf-test.sh
。单条 Kafka 消息过大会有什么问题?如何优化?
答:
compression.type=lz4
)。message.max.bytes
和 fetch.max.bytes
。设计一个支持千万级在线用户的实时弹幕系统,如何基于 Kafka 设计架构?
答:
如何用 Kafka 实现分布式系统的最终一致性(如订单与库存系统)?
答:
Kafka 的 GroupCoordinator
是如何管理 Consumer Group 状态的?
答:
Kafka 的请求处理线程模型是怎样的?为什么分 num.network.threads
和 num.io.threads
?
答:
Kafka 的 ReplicaFetcherThread
如何工作?如果 Follower 的 Fetch 请求延迟高,如何定位问题?
答:
ReplicaFetcherThread
向 Leader 发起 Fetch 请求,维护一个待拉取 Offset 队列。kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Fetch
指标。replica.fetch.max.bytes
过小导致频繁请求。Kafka 的 Selector
类在网络层的作用是什么?与 Java NIO 有何关联?
答:
Selector
实现多路复用,监听多个 Channel 的 IO 事件(读/写/连接)。Selector
实现,减少内存分配(如复用 ByteBuffer),提升网络吞吐。Kafka 日志追加(Log Append)的加锁粒度是怎样的?如何保证高并发写入?
答:
Log
对象内部锁),保证同一 Partition 的顺序写入。如果 Kafka 集群出现“分区倾斜”(某几个 Partition 负载极高),如何快速解决?
答:
如何用 Kafka 实现“全局有序消息”(跨 Partition 有序)?
答:
当面试官问“你还有什么问题想问我们?”时,如何回答能加分?
答:
如果被问到完全不懂的问题,如何应对?
答:
acks
/retries
/flush
参数 + ISR 机制 + Offset 提交策略。auto.commit=true
导致消息丢失,后来改为手动提交并加幂等,这是当时的解决方案……”sendfile
系统调用,结合 DMA 减少 CPU 拷贝,这也是它吞吐高的关键原因之一。”自测题:
自测通过标准:
终极大招:
面试前夜,用 费曼学习法 将 Kafka 核心知识点讲给朋友(或镜子)听,直到能用最简单语言解释清楚。
LogSegment
、ReplicaManager
)。遇到源码题:结合核心类名(如 Log
, ReplicaManager
)和设计思想回答,不必死记代码。
场景题:先明确业务需求(如延迟、一致性要求),再匹配 Kafka 特性。
对比题:从架构设计(如协议、存储模型)、适用场景、运维成本多维度分析。
遇到超纲问题:先拆解问题(如“如何设计追踪系统” → 拆为消息标记、日志收集、可视化),再结合现有技术栈回答。
原理结合实践:举例说明你在项目中如何调优 Kafka(如调整 num.io.threads
解决磁盘瓶颈)。
主动引导话题:若被问及不熟悉的领域,可关联到已知知识点(如“Kafka 安全机制” → 引申到 SSL 配置经验)。
继续补充你的实际项目经验(如用 Kafka 处理日志/实时统计),展现 原理结合实战 的能力,大厂面试官会更青睐!
最后提醒:大厂面试注重 系统性思维,回答时展现“自顶向下”分析能力(从问题表象 → 底层原理 → 解决方案),而非死记答案。掌握这些题目后,建议模拟真实面试场景,练习流畅表达!
掌握以上内容,你已经超越了 90% 的候选人!最后 24 小时,重点复习 高频题(如 Rebalance、Exactly-Once) 和 你的项目中的 Kafka 设计细节,自信迎战即可!