@
Kafka壓測
用Kafka官方自帶的腳本,對Kafka進行壓測。Kafka壓測時,可以查看到哪個地方出現了瓶頸==(CPU,內存,網絡IO)。一般都是網絡IO達到瓶頸。 ==
使用下面兩個kafka自帶的腳本
kafka-consumer-perf-test.sh
kafka-producer-perf-test.sh
Kafka Producer(生產)壓力測試
進入kafka的安裝目錄,執行下面的命令
[sun@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,表示不限流,可測出生產者最大吞吐量。
輸出:
參數解析:本例中一共寫入10w條消息,吞吐量爲1.45 MB/sec,每次寫入的平均延遲爲1718.17毫秒,最大的延遲爲3564.00毫秒。
Kafka Consumer(消費)壓力測試
Consumer的測試,如果這四個指標(IO,CPU,內存,網絡)都不能改變,考慮增加分區數來提升性能。
進入kafka的安裝目錄,執行下面的命令
[sun@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
參數說明:
--zookeeper
指定zookeeper的鏈接信息
--topic
指定topic的名稱
--fetch-size
指定每次fetch的數據的大小
--messages
總共要消費的消息個數
輸出:
start.time
開始時間:2021-01-27 13:55:20:963end.time
結束時間:2021-01-27 13:55:36:555data.consumed.in.MB
共消費數據:22.1497MBMB.sec
吞吐量:1.4206MB/secdata.consumed.in.nMsg
共消費消息條數:232256條nMsg.sec
平均每秒消費條數:14895.8440條
計算Kafka分區數
- 創建一個只有1個分區的topic
- 測試這個topic的producer吞吐量(1.45m/s)和consumer吞吐量(1.42m/s)。數據來自上面的壓測
- 假設他們的值分別是Tp和Tc,單位可以是MB/s。 4)然後假設你期望的目標吞吐量是Tt(10m/s),那麼分區數=Tt /min(Tp,Tc) ,這裏取最小值是因爲使最低的吞吐量都能達到期望的吞吐量。
- 例如:producer吞吐量=20m/s;consumer吞吐量=50m/s,期望吞吐量100m/s;
- 分區數=100 / 20 =5分區 5)分區數一般設置爲:3-10個
Kafka機器數量計算
- Kafka機器數量(經驗公式)=2 (峯值生產速度副本數/100)+1
- 先拿到峯值生產速度,再根據設定的副本數,就能預估出需要部署Kafka的數量。 副本數默認是1個
- 在企業裏面2-3個都有,2個居多。
- 比如我們的峯值生產速度是50M/s(一般不超過50M/s)。生產環境可以設置爲2。 Kafka機器數量=2(502/100)+1=3臺
- 副本多可以提高可靠性,但是會降低網絡傳輸效率。