Spring Kafka 与消息集成

共 19 题
#

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 所有算法压缩比相同