当前位置: 首页 > news >正文

六、消息队列 MQ

Kafka 常见面试题(10个)


1. 什么是 Kafka?它的核心特性有哪些?

答案

Kafka 是一个分布式、分区化、多副本的发布订阅消息系统。

核心特性

  • 高吞吐、低延迟:每秒可处理几十万条消息,延迟毫秒级
  • 可扩展性:支持热扩展,无需停机
  • 持久性:消息持久化到磁盘,支持数据备份
  • 容错性:副本数为 n 时,允许 n-1 个节点失败
  • 高并发:支持数千个客户端同时读写

2. Kafka 的核心组件有哪些?

答案

组件说明
BrokerKafka 集群中的一个服务器节点
Producer消息生产者,负责发布消息
Consumer消息消费者,负责读取消息
Topic主题,用于区分不同类型的消息
Partition分区,Topic 可拆分为多个分区
Consumer Group消费者组,组内消费者协同消费

3. 什么是 ISR?它的作用是什么?

答案

ISR(In-Sync Replicas)是与 Leader 保持同步的副本集合。

关键点

  • Leader 维护 ISR 列表,只有 ISR 内的副本才被认为是“同步副本”
  • 判断标准:replica.lag.time.max.ms(默认 30 秒),超过则踢出 ISR
  • ISR 中最小的 LEO 称为 HW(High Watermark),消费者只能消费到 HW

关联概念

  • LEO:当前副本写入的最大 offset
  • HW:ISR 中最小的 LEO
  • AR= ISR + OSR(Out-of-Sync Replicas)

4. 如何保证 Kafka 消息不丢失?

答案

需要从三方面保障:

阶段风险应对措施
Producer → Broker网络中断、Broker 未收到acks=all,开启 retries,开启幂等性
Broker 落盘Broker 崩溃,数据在内存及时刷盘,依赖 Page Cache
副本同步Leader 崩溃,Follower 未同步min.insync.replicas ≥ 2,禁止unclean.leader.election
Consumer 消费消费成功但 offset 未提交手动提交 offset,搭配幂等消费逻辑

5. Kafka 如何保证消息不重复消费?

答案

1. Producer 端:开启幂等性enable.idempotence=true

  • Kafka 为每个 Producer 分配 PID,配合 Sequence Number 去重
  • 保证单分区内不重复

2. Consumer 端:业务幂等处理

  • 数据库唯一约束
  • Redis 记录已处理消息 ID
  • 业务状态机判断

6. Kafka 如何保证消息的有序性?

答案

核心原则:同一 Partition 内的消息是严格有序的,不同 Partition 之间无法保证全局顺序。

保证有序的方法

  • 将需要有序的数据打进同一个 Partition
  • 指定相同的 Key,Kafka 按 Key 哈希分配分区
  • Producer 端保证串行写入

示例

// 相同订单ID的消息进入同一分区ProducerRecordrecord=newProducerRecord("order-topic",orderId,message);

7. Kafka 高性能的原因是什么?

答案

技术说明
顺序写磁盘追加写入,顺序写速度接近内存
Page Cache先写 OS 缓存,异步刷盘,不阻塞写入
零拷贝(Zero-Copy)使用sendfile系统调用,不经过用户态,直接磁盘→Socket
批量发送Producer 将多条消息打包发送,减少网络请求
消息压缩支持 gzip、snappy、lz4、zstd 等压缩算法
分区并行多个分区可并发读写,多个 Consumer 并发消费
NIO 网络模型基于 Reactor 模型,避免线程爆炸

8. Producer 的 acks 参数有哪几种设置?有什么区别?

答案

含义性能可靠性
0Producer 发送完即成功,不等待确认最高最低,可能丢数据
1Leader 写入成功即返回中等中等,Leader 宕机会丢数据
all/-1Leader 和 ISR 内所有 Follower 都确认最低最高,不丢数据

9. 什么是 Rebalance(再均衡)?触发条件是什么?

答案

Rebalance是 Consumer Group 内分区所有权重新分配的过程。

触发条件

  • 消费者增加或减少(退出、下线、宕机)
  • Topic 分区数增加
  • Coordinator 宕机
  • 订阅的 Topic 数变化

影响:Rebalance 期间暂停消费,可能造成重复消费

10. 消息积压了怎么办?

答案

短期处理

  • 增加 Consumer 实例(前提是有空闲分区)
  • 临时增加消费者线程数
  • 扩容 Topic 分区数(不可逆操作)

长期优化

  • 优化消费者处理逻辑(批量处理、异步处理)
  • 增加fetch.max.bytes单次拉取更多消息
  • 调整max.poll.records控制单次拉取数量
  • 升级硬件配置

速记卡片

Kafka 核心四问: - 不丢:acks=all + min.insync.replicas≥2 + 手动提交 - 不重:幂等Producer + 业务幂等(唯一约束/Redis) - 有序:同Key进同分区 + 串行写入 - 高性能:顺序写 + PageCache + 零拷贝 + 批量 + 压缩 ISR = 同步副本集,决定 HW 和 Leader 选举 Rebalance:消费者变化时触发,期间暂停消费
http://www.jsqmd.com/news/978812/

相关文章:

  • 别再只用RDP了!用Horizon发布RDS应用池,实现安全可控的软件共享
  • 别再瞎调学习率了!用PyTorch的CosineAnnealingWarmRestarts让你的模型收敛又快又稳
  • Horizon UAG部署后必做的5项安全与优化配置(修改locked.properties与注册网关)
  • 保姆级教程:手把手教你用GEE计算Landsat影像的缨帽变换(亮度/绿度/湿度)
  • 为什么你写了100篇文章,却没带来客户?
  • 告别纯GUI操作:用APDL命令流批量处理x_t模型并自动分析
  • GD32 SPI从机模式避坑指南:中断处理、NSS引脚配置与数据回环测试详解
  • 厦门特产店实力排行:厦门美食店、闽南姜母鸭、黄厝网红打卡小吃、厦门伴手礼、厦门姜母鸭伴手礼、厦门姜母鸭小吃、厦门姜母鸭特产选择指南 - 优质品牌商家
  • 用COMSOL复现经典:一杯水的自然对流仿真,从模型选择到后处理全流程解析
  • GD32F405RGT6 SPI主从通信实战:用逻辑分析仪调试时序,告别一问一答的困惑
  • 告别一问一答:用GD32F405RGT6的SPI从机中断模式,实现高效数据接收与响应
  • 2026年简易货梯实测评测:广州液压货梯/广州直顶式升降机/广州直顶式货梯/广州简易升降机/广州简易升降货梯/广州简易货梯/选择指南 - 优质品牌商家
  • ST LIS2DH12TR渠道商
  • 测试转大模型:AI 测试工程师的能力跃迁:写进简历前要补的工程证据
  • 别再手动巡检了!vRealize Operations Manager 8.x 自动化报告配置全攻略(附模板下载)
  • 信息学奥赛图论入门:从‘香甜的黄油’这道题,理解最短路径算法的实际应用场景
  • 告别官方依赖:手把手教你为RK3588 Android12 SDK搭建私有Repo镜像服务器(含Gitolite权限管理)
  • 别再只盯着JVM了!实战配置JMX Exporter精准监控Tomcat连接池与业务MBean
  • 不止于仿真:从COMSOL水杯对流案例,聊聊化工设备设计中那些‘看不见’的流动
  • 2026年口碑好的抛丸机叶轮/盐城抛丸机配件/盐城抛丸机户罩/抛丸机定向套公司哪家好 - 行业平台推荐
  • 高校学生问题上报系统完整开发包(SpringBoot+MySQL含文档与答辩PPT)
  • 告别‘神秘失踪’:用电压比较器LM393给你的嵌入式设备做个掉电‘遗言’电路
  • c++数据结构之c++11(二)
  • 基于STM32+超声波+舵机雷达测距可视化系统
  • 告别nc:用Postman和Wireshark调试你的C++ WebServer,效率提升不止一点点
  • RPA 机器人流程自动化在财务部门的实战应用
  • 《MySQL 慢查询优化:从 10 秒到 10 毫秒的实战指南》
  • Horizon 8连接服务器证书配置避坑指南:从AD CS部署到模板权限的那些细节
  • 你的第一个高性能WebServer雏形:用epoll实现单线程Reactor模型(ET模式详解)
  • 别再死记硬背了!用‘相亲匹配’的故事5分钟搞懂Transformer里的Q、K、V