3. 压测基础概念:吞吐量、延迟、QPS、TPS、P99延迟、背压、消费者Lag
在开始Kafka链路压测与异常波动排查之前,必须建立一套统一的性能度量语言。本章将逐一拆解吞吐量、延迟、QPS、TPS、P99延迟、背压和消费者Lag这七个核心概念,并阐明它们在Kafka场景下的特殊含义与关联关系。
3.1 吞吐量(Throughput)
吞吐量是系统在单位时间内成功处理的数据量。在Kafka中,通常以MB/s(数据量)或records/s(消息条数)为单位。吞吐量反映的是系统的“搬运能力”,是压测中最直观的宏观指标。
| 维度 | 生产者端 | 消费者端 | Broker端 |
|---|---|---|---|
| 单位 | MB/s 或 records/s | MB/s 或 records/s | MB/s(网络/磁盘) |
| 瓶颈点 | 网络带宽、序列化、acks配置 | 消费逻辑、网络带宽、分区数 | 磁盘IO、页缓存、网络线程 |
| 压测关注 | 最大发送速率 | 最大消费速率 | 集群总吞吐上限 |
实践提示: 压测时不要只看峰值吞吐量,要同时观察吞吐量是否稳定。Kafka的吞吐量曲线如果出现“锯齿状”波动,往往是背压或GC抖动的先兆。
3.2 延迟(Latency)
延迟是消息从生产者发送到消费者接收所经历的时间。在Kafka链路中,延迟可以细分为端到端延迟和单跳延迟。端到端延迟 = 生产者发送时间 + Broker存储时间 + 消费者拉取时间。
- 生产者端延迟: 从send()调用到收到Broker确认的时间。
- Broker端延迟: 消息写入Page Cache到刷盘、副本同步的时间。
- 消费者端延迟: 从poll()到业务处理完成的时间。
关键认知: 吞吐量和延迟通常是跷跷板关系。当吞吐量逼近系统上限时,延迟会急剧上升。压测中如果发现延迟随吞吐量线性增长,说明系统处于健康状态;如果出现指数级增长,说明已经进入过载区。
3.3 QPS 与 TPS
QPS(Queries Per Second)和TPS(Transactions Per Second)是压测中最容易被混淆的两个概念。在Kafka场景下,它们的区别更加明显。
| 指标 | 定义 | Kafka中的典型场景 | 压测关注点 |
|---|---|---|---|
| QPS | 每秒查询次数 | 消费者poll()请求、元数据请求、Offset查询 | 请求频率是否压垮Broker的请求队列 |
| TPS | 每秒事务数 | 生产者send() + 确认、Exactly-Once事务 | 事务协调器负载、事务超时率 |
在压测实践中,QPS更关注请求频率,TPS更关注完整业务单元。对于Kafka生产者压测,通常使用TPS来衡量消息发送的成功率;对于消费者压测,QPS更能反映poll()请求的密集程度。
3.4 P99延迟
P99延迟是指系统中99%的请求延迟都低于该值,只有1%的请求比它慢。相比平均延迟,P99能更真实地反映系统的尾部性能。
避坑指南: 很多压测报告只展示平均延迟,这非常危险。平均延迟可能只有10ms,但P99延迟可能已经达到500ms。在Kafka链路中,P99延迟的突然升高往往意味着:
- Broker端Page Cache命中率下降
- 消费者端GC暂停
- 网络丢包重传
3.5 背压(Backpressure)
背压是系统中下游处理速度跟不上上游发送速度时,反向传递的压力信号。在Kafka链路中,背压主要出现在两个位置:
- 生产者 → Broker: 当Broker处理不过来时,生产者会收到重试或超时错误,发送速率被迫下降。
- Broker → 消费者: 当消费者消费太慢时,Broker端的消费组Lag会持续增长,但Broker不会主动限流,而是由消费者自己通过max.poll.records等参数控制。
压测中的背压信号:
- 生产者端:
buffer.memory耗尽、max.block.ms超时 - 消费者端:
poll()间隔超过max.poll.interval.ms,触发Rebalance - Broker端:网络线程池队列积压、请求超时率上升
3.6 消费者Lag
消费者Lag是Kafka特有的核心监控指标,表示消费者当前消费的Offset与分区最新Offset之间的差值。Lag直接反映了消费者是否跟得上生产者的写入速度。
| Lag状态 | 含义 | 压测中的典型表现 |
|---|---|---|
| Lag ≈ 0 | 消费者实时消费,无积压 | 系统处于平衡状态 |
| Lag 缓慢增长 | 消费速度略低于生产速度 | 需要增加消费者实例或优化消费逻辑 |
| Lag 急剧增长 | 消费者出现严重瓶颈或故障 | 消费者GC、网络中断、业务处理耗时飙升 |
| Lag 波动剧烈 | 消费者处理能力不稳定 | Rebalance频繁、资源争抢、背压抖动 |
3.7 概念关联:Kafka链路压测全景
下面这张SVG图展示了压测过程中七个核心概念在Kafka链路中的位置与关联关系,帮助你在后续章节中快速定位异常点。
压测启动前的自查清单:
- ✅ 是否明确了压测目标(吞吐量优先还是延迟优先)?
- ✅ 是否同时采集了平均延迟和P99延迟?
- ✅ 是否配置了消费者Lag的实时监控?
- ✅ 是否设置了背压告警阈值(如生产者超时率 > 1%)?
- ✅ 是否区分了QPS和TPS的压测场景?