秒杀压测计划 + Kafka 分区设计参考
文章目录
- 前言
- 🚀 秒杀压测计划(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落库 → 超时关闭订单 → 完整链路保障 + 运维监控 的 百万并发高可用秒杀系统设计!