一、Kafka壓力測試
創建一個只有1個分區的topic,測試這個topic的producer吞吐量和consumer吞吐量,假設他們的值分別是Tp和Tc,單位可以是MB/s,然后假設總的目標吞吐量是Tt,那么分區數=Tt/max(Tp,Tc)
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目錄下面有這兩個文件。我們來測試一下
[atguigu@hadoop102 kafka]$ bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput -1 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
說明:
record-size是一條信息有多大,單位是字節。
num-records是總共發送多少條信息。
throughput 是每秒多少條信息,設成-1,表示不限流,可測出生產者最大吞吐量。
(2)Kafka會打印下面的信息
100000 records sent, 95877.277085 records/sec (9.14 MB/sec), 187.68 ms avg latency, 424.00 ms max latency, 155 ms 50th, 411 ms 95th, 423 ms 99th, 424 ms 99.9th.
參數解析:本例中一共寫入10w條消息,吞吐量為9.14 MB/sec,每次寫入的平均延遲為187.68毫秒,最大的延遲為424.00毫秒。
3)Kafka Consumer壓力測試
Consumer的測試,如果這四個指標(IO,CPU,內存,網絡)都不能改變,考慮增加分區數來提升性能。
[atguigu@hadoop102 kafka]$ bin/kafka-consumer-perf-test.sh --broker-list hadoop102:9092,hadoop103:9092,hadoop104:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1
start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec
參數說明:
--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,吞吐量2.0714MB/s,共消費100010條,平均每秒消費21722.4153條。
二、Kafka機器數量計算
Kafka機器數量(經驗公式)=2*(峰值生產速度*副本數/100)+1
先拿到峰值生產速度,再根據設定的副本數,就能預估出需要部署Kafka的數量。
比如我們的峰值生產速度是50M/s。副本數為2。
Kafka機器數量=2*(50*2/100)+ 1=3台