# 1. Kafka 事务能原子提交多个分区记录和消费偏移,为何不能直接保证数据库更新也原子 A Kafka 事务能保证数据库更新也原子 B 跨系统事务无需额外处理 C Kafka 事务协调数据库提交 D Kafka 事务只保证 Kafka 内部(分区/偏移)原子,数据库是另一系统,跨系统原子需 Outbox 最终一致 ✓ 正确答案
# 2. Kafka 的 JMX 指标与 Prometheus 集成 A Kafka 指标无法导出 B Prometheus 无需抓取即可监控 C Kafka 不提供 JMX 指标 D 用 JMX Exporter 把 Kafka JMX 指标暴露为 Prometheus 抓取端点,监控副本健康、吞吐与消费积压 ✓ 正确答案
# 3. Kafka 的 Schema Registry 与 Avro/JSON Schema A Schema Registry 集中管理 schema 版本并做兼容性检查,Avro 提供紧凑序列化,保证 schema 演进安全 ✓ 正确答案 B Schema Registry 不检查兼容性 C Avro 与 schema 演进无关 D 消息 schema 由各消费者自行约定
# 4. Kafka 的 Topic/Partition/Offset 模型 A 分区保证全局有序 B 消息按 offset 追加到分区日志,分区内有序、分区可并行,offset 记录消费进度支持重放 ✓ 正确答案 C 一个分区可被多个消费者组内消费者同时消费 D 分区数不影响吞吐
# 5. Kafka 的 enable.auto.commit 与手动提交 A 自动提交最可靠不会丢消息 B 自动提交定时提交可能丢消息,手动提交(处理成功后再提交)实现 at-least-once,但需处理重复 ✓ 正确答案 C 手动提交无法控制时机 D commitAsync 一定成功
# 6. Kafka 的 isolation.level(read_uncommitted/read_committed) A read_committed 会读到未提交事务消息 B read_uncommitted 更严格 C 隔离级别与事务无关 D read_committed 只读已提交事务消息并跳过回滚消息,read_uncommitted 读所有消息(含未提交) ✓ 正确答案
# 7. Kafka 的 max.poll.interval.ms 与 session.timeout.ms A 两者都只影响发送 B 处理慢应调小 max.poll.interval.ms C max.poll.interval.ms 管处理超时,session.timeout.ms 管心跳失联,两者超时都会触发 rebalance ✓ 正确答案 D 两者与 rebalance 无关
# 8. Kafka 消费积压时增加消费者的上限为什么是分区数,扩分区对已有消息顺序的影响 A 增加消费者一定能解决积压 B 消费者数可超过分区数 C 扩分区会破坏分区内有序 D 一个分区同时只被组内一个消费者消费,消费者数 <= 分区数,积压时需扩分区提升并行度,分区内有序不破坏 ✓ 正确答案
# 9. Spring Kafka 4.0 中 KafkaTemplate.send 与 CompletableFuture 异步回调在虚拟线程下的阻塞语义 A send 会阻塞当前线程直到发送完成 B 回调在虚拟线程执行 C send 返回 CompletableFuture 异步非阻塞,get() 挂起虚拟线程不占平台线程,但 buffer 满时会阻塞需配置缓冲 ✓ 正确答案 D 异步回调可放心阻塞
# 10. Spring Kafka 的 @KafkaListener 配合 BatchListener 在 Spring Boot 4.0 虚拟线程下的执行模型 A BatchListener 批量消费,虚拟线程并发处理 batch 提升吞吐,但需注意共享 consumer 的 offset 提交与分区内顺序 ✓ 正确答案 B 虚拟线程改变分区内有序 C BatchListener 只能单条消费 D 批量消费不能并发处理
# 11. Kafka 的分区再均衡(Rebalance)协议(Eager/Cooperative) A Eager 全体撤销再分配,Cooperative 增量协调减少暂停窗口,是现代推荐的协议 ✓ 正确答案 B Cooperative 不重新分配分区 C 两者完全等价 D Cooperative 会全体暂停
# 12. Kafka 的幂等 Producer(enable.idempotence=true) A enable.idempotence 用 producerId+sequence 去重,保证单分区内不重复并配合 acks=all,跨分区需事务 ✓ 正确答案 B 幂等保证跨分区不重复 C 幂等 producer 重启后仍保持幂等 D 幂等与重试无关
# 13. Kafka 的消息顺序性与单分区保证 A Kafka 保证全局有序 B 多线程消费同一分区自动保序 C Kafka 只保证分区内有序,用 key 哈希路由到同一分区保证相关消息有序,跨分区不保证 ✓ 正确答案 D key 与顺序无关
# 14. 消费者 seek/assign 手动管理位移的场景(重放、死信重试)与风险 A seek 只能从最新消费 B assign 后仍参与 rebalance C 手动位移无风险 D seek 可从指定 offset 重放(重试/死信),assign 手动分配分区,但手动管理位移易致重复/丢失,需幂等 ✓ 正确答案
# 15. Spring Kafka 的 @RetryableTopic 与死信处理器(DltHandler)如何实现重试与告警 A @RetryableTopic 自动路由到重试主题并最终进入死信主题,@DltHandler 处理失败消息进行记录/告警 ✓ 正确答案 B 重试主题不设延迟 C 死信处理后消息丢失 D 重试失败的消息直接丢弃
# 16. Kafka 4.x 完全移除 ZooKeeper 后,Spring Boot 4.x + Spring Kafka 在 KRaft 模式下的适配要点 A 客户端仍需配置 ZooKeeper B KRaft 移除 ZooKeeper,元数据由 Raft 管理,客户端只连 broker 基本透明,适配重点是部署与迁移 ✓ 正确答案 C 客户端必须改用新协议 D KRaft 与 ZooKeeper 完全等价
# 17. Producer 的 acks 参数(0/1/-1)语义 A acks=0 最可靠 B acks 不影响可靠性 C acks=all 吞吐最高 D acks=0 不确认吞吐最高可能丢,acks=1 leader 确认,acks=all 全副本确认最可靠,幂等需 acks=all ✓ 正确答案
# 18. Spring Kafka 的消费确认,AckMode 各取值(MANUAL/RECORD/BATCH)的语义如何? A RECORD 是每批提交一次 B RECORD 每消息提交、BATCH 每批提交、MANUAL 由业务手动 acknowledge,粒度与灵活性不同 ✓ 正确答案 C MANUAL 提交后立即生效 D 所有 AckMode 提交时机相同
# 19. Kafka 压缩算法(gzip/lz4/zstd)的选择对吞吐与 CPU 的影响 A gzip 压缩速度最快 B lz4/snappy 快但压缩比低,gzip 压缩比高但 CPU 开销大,zstd 兼顾两者,按带宽与 CPU 权衡 ✓ 正确答案 C 压缩只在 consumer 端发生 D 所有算法压缩比相同