当前位置: 首页 > 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.zskr.cn/news/1490538.html

相关文章:

  • 别再瞎调学习率了!用PyTorch的CosineAnnealingWarmRestarts让你的模型收敛又快又稳
  • 保姆级教程:手把手教你用GEE计算Landsat影像的缨帽变换(亮度/绿度/湿度)
  • 告别纯GUI操作:用APDL命令流批量处理x_t模型并自动分析
  • 2026年简易货梯实测评测:广州液压货梯/广州直顶式升降机/广州直顶式货梯/广州简易升降机/广州简易升降货梯/广州简易货梯/选择指南 - 优质品牌商家
  • ST LIS2DH12TR渠道商
  • 信息学奥赛图论入门:从‘香甜的黄油’这道题,理解最短路径算法的实际应用场景
  • c++数据结构之c++11(二)
  • 2026年口碑好的抛丸机叶轮/盐城抛丸机配件/盐城抛丸机户罩/抛丸机定向套公司哪家好 - 行业平台推荐
  • Halcon算子参数里的三个冒号(:)到底怎么用?新手避坑指南与实战解析
  • ​毕业季-你真的会用 Word 格式刷吗?​
  • 别再硬改CSS了!Element Plus的el-table样式,用这3个官方API更优雅
  • GPT-5.2在形式化验证中的工程优化实践
  • 保姆级教程:用QFIL工具备份高通手机eMMC分区(附system.xml配置详解)
  • WHMCS对接易支付(萌支付)的即用型插件包,含支付、回调与配置文件
  • Horizon UAG部署后必做的5项安全检查与优化配置(从系统配置到连接服务器锁定)
  • 终极免费方案:在Windows电脑上实现AirPlay 2投屏接收功能完整指南
  • 用Python和Matlab搞定数学建模:从沙丘鹤到汽车租赁的差分方程实战
  • GD32F405RGT6 SPI主从通信实战:从“一问一答”到完整代码调试(附逻辑分析仪抓包)
  • 运维老鸟亲测:FusionCompute这几个‘不起眼’的安全设置,关键时刻真能救命
  • 2026年车间降尘设备供应商TOP5实力盘点:双流体喷雾/喷雾降尘/工程洗轮机/布袋除尘器/干雾抑尘/干雾降尘/选择指南 - 优质品牌商家
  • Visual Studio 2022配置WinUI 3开发环境全攻略(含离线补丁和避坑指南)
  • YX76:燕尾式楼承板/直立锁边铝镁锰板/铝镁锰直立锁边板/镀铝锌彩钢板/470型彩钢板/YX28-205-820/选择指南 - 优质品牌商家
  • 告别虚拟机:在VS Code+PlatformIO环境下为STM32开发板搭建SOEM调试环境
  • 停止AI研发!Anthropic万字长文警告:AI“递归式自我改进”正在逼近
  • DVWA靶场实战:手把手教你用XSS平台盗取Cookie并登录后台(保姆级教程)
  • 保姆级教程:用Parasolid的PK_TOPOL_facet函数将NX模型转为三角网格(附完整C++代码)
  • MIT Cheetah 3的MPC控制器实战:如何用凸优化搞定四足机器人的复杂步态?
  • Vim + Netcat + Tcpdump:手把手教你搭建和调试你的第一个C++ WebServer原型
  • 图片去水印用什么工具?2026免费图片去水印工具推荐
  • 7.5元包邮的RC522读卡器,手把手教你用Arduino复制小区门禁卡(附完整代码)