消息队列

官官方信息技术老师·8 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

消息队列

系统设计与场景题 · 第 3 章 中间件与稳定性

按 空格/→ 演示下一步

问一句
1 / 8 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

消息队列

系统设计与场景题 · 第 3 章 中间件与稳定性

1第 1 页 · 消息队列

MQ 三大作用(削峰/解耦/

消息队列三大件:削峰填谷、系统解耦、流程异步——每一项都伴随一致性的代价。

削峰
突发流量先排队,后端按能力匀速消费
解耦
生产者不关心谁消费,新增订阅方零改动
异步
非核心链路后置处理,主流程时延大降
2第 2 页 · MQ 三大作用(削峰/解耦/

消息不丢失三段保证

丢失可能发生在三段:生产、存储、消费,每段各有确认与开关。

生产段
发送确认加失败重试,重要消息本地表兜底
存储段
刷盘策略与副本同步,持久化落到位
消费段
手动 ack,处理完才确认,失败重投
3第 3 页 · 消息不丢失三段保证

重复消费与顺序消息

at-least-once 必然重复:消费端幂等是宿命;顺序要分区有序加串行消费。

重复消费
重试与再均衡导致重复,幂等键去重
分区有序
同 key 落同分区,分区内天然有序
全局有序
单分区单消费者,用吞吐换顺序
4第 4 页 · 重复消费与顺序消息

消息积压治理

积压是消费力跟不上:扩消费者、批量拉取、降级跳过,先止血再治本。

扩容
在分区数允许范围内加消费者实例
批量降级
批量拉取处理,非核心消息可暂缓
跳板重放
积压过大转储新 topic,十倍并发重放
5第 5 页 · 消息积压治理

Kafka 架构要点

分布式日志不是队列:分区、副本、消费者组三个概念撑起高吞吐。

分区
topic 切分区,是并行度与顺序的单位
副本
多副本容灾,leader 读写 follower 同步
消费者组
组内分区独占消费,组间广播
顺序写
追加日志加零拷贝,吞吐的秘密
6第 6 页 · Kafka 架构要点

本节要点

  • ✓MQ:削峰、解耦、异步
  • ✓不丢:生产确认+持久化+手动 ack
  • ✓重复是宿命,消费要幂等
  • ✓积压:扩容、批量、跳板重放
延伸主题:给下单链路加 MQ排查一次消息积压
7第 7 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1引入 MQ 解决了耦合,又带来了什么新问题?

参考答案最终一致的延迟、消息丢失与重复、积压运维、跨系统排障复杂度。MQ 是用复杂度换弹性的交易——值得,但前提是接得住这些新增问题。

2为什么 Kafka 快?

参考答案三件事:磁盘顺序写接近内存速度;零拷贝省去用户态往返拷贝;批量压缩配合分区并行。它不是把消息「管好」,而是把日志「写快」。

3消息顺序与吞吐的矛盾怎么破?

参考答案全局顺序必须单分区单消费者,吞吐封顶;实践按业务 key(订单号、用户 ID)分区,分区内有序、分区间并行。业务要的是「同一单有序」,不是全宇宙有序。

8第 8 页 · 课后思考