kafka項目經驗之如何進行Kafka壓力測試、如何計算Kafka分區數、如何確定Kaftka集群機器數量
@
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台
- 副本多可以提高可靠性,但是會降低網路傳輸效率。