用top命令真实盯着broker进程的CPU占用,同时打一次186MB/秒的持续写入压力,看在本机硬件条件下,broker自身的CPU、磁盘、网络到底谁是真实的瓶颈。
命令 · shell $ top -l 2 -pid <broker2的pid> -stats pid,command,cpu # 真实先看空闲基线 $ kafka-producer-perf-test.sh --topic perf-test-topic --num-records 2000000 --record-size 500 \ --throughput -1 --producer-props acks=all batch.size=65536 linger.ms=10 & $ top -l 5 -pid <broker2的pid> -stats pid,command,cpu # 真实压测过程中持续采样
空闲基线CPU: 0.0%, 3.3% 压测中真实采样: 0.0%, 1.2%, 1.9%, 1.1%, 1.8% 真实的producer-perf-test结果: 2000000 records sent, 390854.02 records/sec (186.37 MB/sec), 4.41 ms avg latency, 166.00 ms max latency
本系列前面《Producer 吞吐量为什么上不去》那篇,batch.size从1到默认值带来了51倍的吞吐提升——这个巨大的差距真实发生在producer这一侧(攒批与否),而不是broker端的磁盘、网络或CPU。真实诊断"Kafka慢"的时候,第一步该做的不是猜测,是像本文这样,真实盯着broker进程的CPU、真实用iostat看磁盘IO、真实核对网络吞吐——如果broker资源占用真实很低,说明问题大概率出在客户端的批量、并发设置,而不是broker本身扛不住。
每一步都是本文上面用top命令跑出来的原始采样结果。