文章目录
- 前言
- 🚀 秒杀压测计划(TPS预估 + 测试流程)
- 1. 目标设定
- 2. 压测工具推荐
- 3. 压测命令示例(ab版)
- 4. 测试关注指标
- 📦 Kafka Topic 分区设计参考表
- 1. 单 Topic 设计
- 2. 分区路由规则设计(Partition Key)
- 🔥 最佳实践总结(再强调一次)
- 🧠 总结
前言
✅ 秒杀压测计划 + Kafka 分区设计参考
🚀 秒杀压测计划(TPS预估 + 测试流程)
1. 目标设定
| 项目 | 预估值 |
|---|---|
| 活动规模 | 10万用户同时抢购 |
| 单品库存 | 1000件商品 |
| 秒杀窗口 | 10秒内 |
| 理想 TPS | 10,000 requests/sec |
2. 压测工具推荐
- Apache Benchmark (
ab)(轻量简单) - wrk(更精准,可自定义脚本)
- k6(现代化、分布式压测)
3. 压测命令示例(ab版)
ab -n 10000 -c 1000 -p post.json -T application/json \-H "x-user-id: user1" http://localhost:3000/seckill/10001
| 参数 | 含义 |
|---|---|
-n | 总请求数 |
-c | 并发数(1000人同时抢) |
-p | POST 请求体 |
4. 测试关注指标
| 关键指标 | 理想范围 |
|---|---|
| 接口平均响应时间 | < 50 ms |
| Redis 扣库存成功率 | 99% 以上 |
| Kafka 投递延迟 | 单条消息 < 10 ms |
| Kafka Lag(堆积量) | 保持 lag <= 1000(可接受范围) |
| 消费端处理TPS | 保持 > 5000条/秒 |
📦 Kafka Topic 分区设计参考表
1. 单 Topic 设计
| 活动规模 | 推荐分区数 | 说明 |
|---|---|---|
| <10万人 | 6-12 partitions | 机器数 × 2 |
| 10万-50万人 | 12-24 partitions | |
| 50万以上 | 24-48 partitions |
2. 分区路由规则设计(Partition Key)
// 选择 skuId 做 key
await producer.send({topic: 'seckill-orders',messages: [{key: skuId, // 让同一个商品的抢购进同一个分区value: JSON.stringify(orderPayload),},],
});
✅ 这样可以:
- 保证同一商品局部顺序消费
- 保证消费端负载均衡(不同商品打到不同分区)
🔥 最佳实践总结(再强调一次)
| 类别 | 关键做法 |
|---|---|
| 流量入口防护 | Nginx 限流 + 接口限流 + Redis限流 |
| 原子扣库存 | Redis Lua 脚本一次性完成判断+扣减 |
| 异步下单 | Kafka 分区异步队列 |
| 幂等控制 | 订单表唯一索引 or Redis setnx |
| 超时取消 | Redis key expire + 定时任务 |
| 监控与告警 | Kafka Lag、消费者异常率、DLQ 消息 |
| 可扩展性 | Kafka 多分区,多消费组实例 |
🧠 总结
从秒杀入口 → Redis扣库存 → Kafka异步 → DB落库 → 超时关闭订单 → 完整链路保障 + 运维监控 的 百万并发高可用秒杀系统设计!



