Kafka吞吐压测从入门到进阶 - 第1节

一、吞吐压测入门:到底什么是吞吐压测?

各位同学好,我是老张。做了十几年性能测试,今天咱们聊聊吞吐压测。

很多人一听到「压测」两个字,就觉得是拿工具拼命发请求。其实不然。吞吐压测,说白了就是测量系统在单位时间内能处理多少请求。我习惯把它比作「高速公路的通行能力」——你修了八车道,到底能跑多少辆车?这就是吞吐量。

吞吐压测的核心定义:通过模拟真实用户请求,持续向系统施加压力,测量系统在单位时间内成功处理的请求数量,从而评估系统的处理能力和稳定性。

1.1 为什么需要吞吐压测?

我记得刚入行那会儿,有个同事上线前只做了功能测试。结果上线当天,用户一多,系统直接挂了。为什么?因为功能测试只验证「能不能用」,不验证「能扛多少人」。

吞吐压测要回答三个问题:

  • 系统到底能扛多少并发?—— 峰值能力
  • 在持续压力下会不会崩?—— 稳定性
  • 瓶颈在哪里?—— 数据库?网络?代码?

你想想看,没有吞吐压测,就像开着一辆没装油表的车上高速——你永远不知道什么时候会抛锚。

二、吞吐量核心指标:QPS 和 TPS

聊吞吐压测,绕不开两个词:QPS 和 TPS。很多新手容易搞混,我当年也踩过这个坑。

2.1 QPS(Queries Per Second)—— 每秒查询数

QPS 指的是系统每秒能处理的查询请求数量。通常用于读多写少的场景,比如搜索引擎、商品列表页。

我的经验:在做电商压测时,商品详情页的 QPS 往往是最高的。双十一那会儿,我们测过单机 QPS 能到 5000+,但一旦超过 6000,数据库连接池就开始排队了。

2.2 TPS(Transactions Per Second)—— 每秒事务数

TPS 指的是系统每秒能完成的完整事务数量。一个事务可能包含多个请求,比如「下单」这个动作,包括:查询库存 → 扣减库存 → 生成订单 → 支付回调。这一整套才算一个事务。

指标 全称 适用场景 典型例子
QPS Queries Per Second 读多写少、查询类 搜索、列表页、详情页
TPS Transactions Per Second 写操作、事务类 下单、支付、转账

避坑指南:我曾经见过一个团队把 QPS 当 TPS 报给老板,结果上线后实际吞吐量只有报告的 1/3。记住:一个 TPS 可能等于 3~5 个 QPS,别搞混了。

2.3 其他关键指标

除了 QPS/TPS,还有几个指标必须关注:

  • 响应时间(RT):从发请求到收到响应的时间。一般看平均 RT 和 P99 RT。
  • 并发数:同一时刻系统正在处理的请求数。
  • 错误率:失败请求占总请求的比例。我一般要求 错误率 < 0.1%。

这三者之间有个经典关系:并发数 = QPS × 平均响应时间。你想想看,如果响应时间变长,并发数不变,QPS 就会下降。这就是为什么优化响应时间能直接提升吞吐量。

三、压测与常规测试的区别

很多刚入行的同学问我:「压测和功能测试有啥区别?不都是点点点吗?」

嗯,区别大了去了。我画了张图,你看一眼就明白了。

压测 vs 常规测试:核心区别 常规测试 目标:验证功能正确性 压力:1~2 个用户 时长:几分钟 关注点:返回结果对不对 工具:Postman、JUnit ✅ 能测出逻辑错误 吞吐压测 目标:测量系统处理能力 压力:100~10000+ 用户 时长:数小时甚至数天 关注点:QPS、RT、错误率 工具:JMeter、Locust、wrk ⚠️ 能发现性能瓶颈 两者互补:先过功能测试,再做吞吐压测

3.1 目标不同

常规测试问的是「对不对」,压测问的是「快不快、稳不稳」。我举个例子:

  • 功能测试:用户登录 → 输入正确密码 → 跳转到首页 ✅
  • 吞吐压测:1000 个用户同时登录 → 平均响应时间 200ms → QPS 5000 → 错误率 0% ✅

你看,功能测试只关心结果,压测关心的是在多大压力下还能保持正确结果。

3.2 压力模型不同

常规测试通常只有 1~2 个虚拟用户。而吞吐压测需要模拟真实并发场景:

维度 常规测试 吞吐压测
用户数 1~2 个 100~10000+ 个
持续时间 几分钟 数小时 ~ 数天
数据量 少量测试数据 海量真实数据
监控 基本不需要 CPU、内存、IO、网络全链路

我的习惯:做压测前,我会先跑一遍功能测试,确保核心链路没问题。否则压测时发现错误,你分不清是性能问题还是代码 bug。

3.3 工具链不同

常规测试用 Postman、JUnit 就够了。但吞吐压测需要专门的工具:

  • JMeter:老牌工具,插件丰富,适合 HTTP/数据库压测
  • Locust:基于 Python,写脚本灵活,适合自定义协议
  • wrk:轻量级,适合快速压测 HTTP 接口
  • Gatling:基于 Scala,性能好,适合高并发场景

我个人最常用 JMeter,因为它生态好,社区活跃。但如果你要压测 gRPC 或 WebSocket,Locust 可能更合适。

四、本章小结

好了,第一节课的内容就这些。咱们回顾一下重点:

  • 吞吐压测是测量系统在单位时间内能处理多少请求
  • QPS 是每秒查询数,TPS 是每秒事务数,别搞混
  • 压测和常规测试的目标、压力模型、工具链完全不同

最后说一句:吞吐压测不是「跑个脚本看数字」那么简单。你得理解业务场景、设计合理的压力模型、分析瓶颈、给出优化建议。这才是真正的价值所在。