消息平台面试专题
概述
本文汇总消息平台方向高频面试题,覆盖选型对比、可靠性、顺序性、事务、死信、积压治理六大块。每题给出要点式回答与追问方向,帮你系统梳理面试知识。
一、选型对比类
1.1 Kafka vs Pulsar?
回答要点:
Kafka:存算耦合(Broker 存+算)
Pulsar:存算分离(BookKeeper)
Pulsar 优势:
独立扩缩容
多租户
多层存储(对象存储)
跨地域复制内置
Kafka 优势:
生态成熟(Flink/Spark)
运维简单
社区活跃1.2 RocketMQ 与 Kafka 区别?
RocketMQ:
事务消息、延迟消息(金融友好)
可靠性强
NameServer 轻量注册
Kafka:
高吞吐、日志/流场景
分区模型、生态强
选型:
金融事务 → RocketMQ
数据管道/流 → Kafka1.3 RabbitMQ 什么场景用?
特点:
灵活路由(Exchange)
功能丰富
运维简单
适用:
业务解耦、RPC
中小规模低延迟
大数据场景少见二、消息可靠性
2.1 消息丢失怎么防?
三个环节:
生产端:
acks=all、幂等、重试
Broker 端:
副本 ≥ 2、min ISR
关闭 unclean 选举
消费端:
手动提交、幂等消费2.2 消息重复怎么办?
重复来源:
Rebalance 位移丢失
提交失败重放
生产重试
解法:
幂等消费(唯一键/去重表)
合理提交时机
事务(读-处理-提交)2.3 怎么理解 at-most / at-least / exactly-once?
at-most-once:最多一次(可能丢)
→ acks=0/1 + 自动提交早
at-least-once:至少一次(可能重)
→ acks=all + 手动提交
exactly-once:精确一次
→ 幂等 + 事务 + 状态事务化三、顺序性
3.1 怎么保证消息顺序?
Kafka:
同 key → 同分区 → 有序
全局有序:单分区
生产注意:
重试可能导致乱序
(开幂等解决部分)
消费注意:
分区单线程消费3.2 全局顺序与并行的取舍?
方案:
单分区单消费者(全局有序,吞吐低)
多分区按 key 路由(局部有序,吞吐高)
实践:
90% 场景局部有序即可
全局顺序按需评估3.3 顺序被破坏的场景?
| 场景 | 原因 | 解决 |
|---|---|---|
| 生产重试乱序 | 重试消息先到 | 幂等/顺序保证 |
| 多线程消费 | 并发处理 | 分区内串行 |
| Rebalance | 分区换消费者 | 幂等+去重 |
四、事务消息
4.1 Kafka 事务原理?
事务:
跨分区原子写
事务协调器 + __transaction_state
流程:
开启 → 发送 → 提交/中止
配合幂等 → 精确一次写入4.2 RocketMQ 事务消息原理?
RocketMQ 半消息机制:
1. 发送 half 消息(不可见)
2. 业务执行本地事务
3. 提交/回滚 half
4. 超时 → 回查确认
保证:
本地事务与消息发送原子
适合订单/支付场景4.3 端到端 Exactly-Once 怎么做?
方案:
读端:事务消费(消费-处理-提交原子)
处理:状态事务化(Flink/KStreams)
写端:幂等 + 事务输出
代价:性能开销
适用:金融等强一致场景五、死信与重试
5.1 死信是什么?
死信(DLQ):
多次重试仍失败的消息
转入死信队列
作用:
不阻塞正常消费
保留失败数据供排查
支持人工/定时重放5.2 重试策略?
重试设计:
指数退避(间隔递增)
最大重试次数
失败转死信
注意:
重试期间消息不丢失
监控死信量5.3 死信消息怎么处理?
处理流程:
监控死信队列
分析失败原因
修复后重放(幂等)
无法修复 → 人工/归档六、积压与吞吐
6.1 积压原因与处理?
原因:
消费并行度不足
单条处理慢
下游阻塞
Rebalance 抖动
处理:
加消费者(≤ 分区)
优化处理/批处理
增加分区(长期)
临时扩容追积压6.2 如何提升吞吐?
生产端:
批次调大(batch.size/linger)
压缩(lz4/zstd)
异步发送
消费端:
并行消费
批量拉取
异步处理(注意顺序)
集群:
分区数、Broker 数
网络/磁盘6.3 消息平台容量怎么估算?
估算公式:
存储 = 生产速率 × 保留 × 副本 × 余量
吞吐 = 峰值 × 余量
分区 = 并行度需求
流程:
收集峰值 → 估算 → 规划 → 上线校准七、架构设计题
7.1 设计一个订单消息系统
设计要点:
可靠性:事务消息(订单+消息原子)
顺序:按订单 ID 路由
积压:可扩容
补偿:对账 + 重放
架构:
RocketMQ 事务消息
或 Kafka 幂等 + 幂等消费7.2 大促流量保障?
方案:
容量评估(峰值×副本)
配额限流保护核心
消费端横向扩容
监控积压/延迟
降级预案(非核心丢弃/延迟)7.3 跨机房同步方案?
方案对比:
MirrorMaker 2(Kafka 镜像)
Pulsar Geo-Replication
业务双写
要点:
异步复制
监控复制延迟
切换演练八、避坑与加分
8.1 加分项
加分点:
用真实事故/优化案例
讲清权衡(可靠 vs 可用)
讲排查路径(积压/丢失)
量化指标8.2 常见雷区
| 雷区 | 避免 |
|---|---|
| 背配置 | 讲原理 |
| 只答结论 | 讲机制+权衡 |
| 忽略语义 | 分清三种投递语义 |
九、小结
消息平台面试核心:选型对比(Kafka/Pulsar/RocketMQ/RabbitMQ)、可靠性(丢/重/语义)、顺序性(分区模型)、事务与死信、积压治理。回答多用"权衡"视角,把机制讲清楚,最后落到场景方案与排查路径,就能答得稳而深。