項目經驗之Kafka壓力測試
1)Kafka壓測
用Kafka官方自帶的腳本,對Kafka進行壓測。Kafka壓測時,可以查看到哪個地方出現了瓶頸(CPU,內存,網絡IO)。一般都是網絡IO達到瓶頸。
kafka-consumer-perf-test.sh
kafka-producer-perf-test.sh
2)Kafka Producer壓力測試
(1)在/opt/module/kafka/bin目錄下面有這兩個文件。我們來測試一下
[hadoop@hadoop102 kafka]$ bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput 1000 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
說明:record-size是一條信息有多大,單位是字節。num-records是總共發送多少條信息。throughput 是每秒多少條信息。
(2)Kafka會打印下面的信息
5000 records sent, 999.4 records/sec (0.10 MB/sec), 1.9 ms avg latency, 254.0 max latency.
5002 records sent, 1000.4 records/sec (0.10 MB/sec), 0.7 ms avg latency, 12.0 max latency.
5001 records sent, 1000.0 records/sec (0.10 MB/sec), 0.8 ms avg latency, 4.0 max latency.
5000 records sent, 1000.0 records/sec (0.10 MB/sec), 0.7 ms avg latency, 3.0 max latency.
5000 records sent, 1000.0 records/sec (0.10 MB/sec), 0.8 ms avg latency, 5.0 max latency.
參數解析:本例中一共寫入10w條消息,每秒向Kafka寫入了0.10MB的數據,平均是1000條消息/秒,每次寫入的平均延遲為0.8毫秒,最大的延遲為254毫秒。
3)Kafka Consumer壓力測試
Consumer的測試,如果這四個指標(IO,CPU,內存,網絡)都不能改變,考慮增加分區數來提升性能。
[hadoop@hadoop102 kafka]$
bin/kafka-consumer-perf-test.sh --zookeeper hadoop102:2181 --topic test --fetch-size 10000 --messages 10000000 --threads 1
參數說明:
--zookeeper 指定zookeeper的鏈接信息
--topic 指定topic的名稱
--fetch-size 指定每次fetch的數據的大小
--messages 總共要消費的消息個數
測試結果說明:
start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec
2019-02-19 20:29:07:566, 2019-02-19 20:29:12:170, 9.5368, 2.0714, 100010, 21722.4153
開始測試時間,測試結束數據,最大吞吐率9.5368MB/s,平均每秒消費2.0714MB/s,最大每秒消費100010條,平均每秒消費21722.4153條。
4.5.12 項目經驗之Kafka機器數量計算
Kafka機器數量(經驗公式)=2*(峰值生產速度*副本數/100)+1
先要預估一天大概產生多少數據,然后用Kafka自帶的生產壓測(只測試Kafka的寫入速度,保證數據不積壓),計算出峰值生產速度。再根據設定的副本數,就能預估出需要部署Kafka的數量。
比如我們采用壓力測試測出寫入的速度是10M/s一台,峰值的業務數據的速度是50M/s。副本數為2。
Kafka機器數量=2*(50*2/100)+ 1=3台