信息技术大学
消息队列
系统设计与场景题 · 第 3 章 中间件与稳定性
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
消息队列
系统设计与场景题 · 第 3 章 中间件与稳定性
MQ 三大作用(削峰/解耦/
消息队列三大件:削峰填谷、系统解耦、流程异步——每一项都伴随一致性的代价。
削峰
突发流量先排队,后端按能力匀速消费
解耦
生产者不关心谁消费,新增订阅方零改动
异步
非核心链路后置处理,主流程时延大降
消息不丢失三段保证
丢失可能发生在三段:生产、存储、消费,每段各有确认与开关。
生产段
发送确认加失败重试,重要消息本地表兜底
存储段
刷盘策略与副本同步,持久化落到位
消费段
手动 ack,处理完才确认,失败重投
重复消费与顺序消息
at-least-once 必然重复:消费端幂等是宿命;顺序要分区有序加串行消费。
重复消费
重试与再均衡导致重复,幂等键去重
分区有序
同 key 落同分区,分区内天然有序
全局有序
单分区单消费者,用吞吐换顺序
消息积压治理
积压是消费力跟不上:扩消费者、批量拉取、降级跳过,先止血再治本。
扩容
在分区数允许范围内加消费者实例
批量降级
批量拉取处理,非核心消息可暂缓
跳板重放
积压过大转储新 topic,十倍并发重放
Kafka 架构要点
分布式日志不是队列:分区、副本、消费者组三个概念撑起高吞吐。
分区
topic 切分区,是并行度与顺序的单位
副本
多副本容灾,leader 读写 follower 同步
消费者组
组内分区独占消费,组间广播
顺序写
追加日志加零拷贝,吞吐的秘密
本节要点
- ✓MQ:削峰、解耦、异步
- ✓不丢:生产确认+持久化+手动 ack
- ✓重复是宿命,消费要幂等
- ✓积压:扩容、批量、跳板重放
延伸主题:给下单链路加 MQ排查一次消息积压
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1引入 MQ 解决了耦合,又带来了什么新问题?
参考答案最终一致的延迟、消息丢失与重复、积压运维、跨系统排障复杂度。MQ 是用复杂度换弹性的交易——值得,但前提是接得住这些新增问题。
2为什么 Kafka 快?
参考答案三件事:磁盘顺序写接近内存速度;零拷贝省去用户态往返拷贝;批量压缩配合分区并行。它不是把消息「管好」,而是把日志「写快」。
3消息顺序与吞吐的矛盾怎么破?
参考答案全局顺序必须单分区单消费者,吞吐封顶;实践按业务 key(订单号、用户 ID)分区,分区内有序、分区间并行。业务要的是「同一单有序」,不是全宇宙有序。