簡體   English   中英

為什么 kafka 生產者(性能測試)具有如此低的吞吐量/高延遲?

[英]why does kafka producer (perf test) have such low throughput / high latency?

我是 kafka 的新手,正在運行一些性能測試。 我正在運行一個由筆記本電腦和樹莓派零 W(1 GHz、單核 CPU、512 MB RAM、802.11n 無線 LAN)組成的 2 機器集群。 最終,pi 將運行一個生產者(java),它將二進制傳感器數據(理想情況下是盡可能快的較小記錄,例如 10 kb)發送到 kafka,然后由我的筆記本電腦或另一個 pi 上的消費者讀取。 稍后會有一個單獨的應用程序離線處理數據。 我只有 1 個主題和 1 個分區,沒有復制。

我目前正在嘗試對生產者的性能進行基准測試/了解它的功能。 這是來自 kafka-producer-perf-test.sh 的 output,表明存在相當大的延遲且吞吐量不高。 我已經玩過設置(如 linger.ms、batch.size、acks、吞吐量和記錄大小,似乎記錄大小越大,吞吐量越高(直到 ~750 kb,然后減少)但是延遲要么大致相同,要么實際上減少了。

我只能達到 ~0.6 MB/秒,這對於我正在處理的應用程序來說太慢了。 當我減小記錄大小時,吞吐量甚至更差,約為 0.10 MB/秒。 因為我是 kafka 的新手,所以我想知道這是我在使用 pi 零 w 時應該期待的還是我的設置/生產者屬性等不理想的東西?

pi@raspberrypi:~/Kafka/kafka_2.12-2.4.0 $ bin/kafka-producer-perf-test.sh --topic perf_test --num-records 100 --thughput 1000000 --producer-props bootstrap.servers=192.168.0.170:9092,192.168.0.172:9092 --record-size 750000
OpenJDK Zero VM warning: G1 GC is disabled in this release.
2 records sent, 0.3 records/sec (0.25 MB/sec), 4439.5 ms avg latency, 4607.0 ms max latency.
5 records sent, 0.9 records/sec (0.62 MB/sec), 6909.0 ms avg latency, 9180.0 ms max latency.
5 records sent, 0.8 records/sec (0.58 MB/sec), 12783.4 ms avg latency, 15075.0 ms max latency.
5 records sent, 0.8 records/sec (0.59 MB/sec), 18587.0 ms avg latency, 21165.0 ms max latency.
5 records sent, 0.9 records/sec (0.62 MB/sec), 24551.2 ms avg latency, 26851.0 ms max latency.
4 records sent, 0.8 records/sec (0.55 MB/sec), 30048.0 ms avg latency, 31850.0 ms max latency.
5 records sent, 0.9 records/sec (0.62 MB/sec), 35323.4 ms avg latency, 37657.0 ms max latency.
5 records sent, 0.9 records/sec (0.63 MB/sec), 41030.4 ms avg latency, 43266.0 ms max latency.
5 records sent, 0.8 records/sec (0.59 MB/sec), 46736.6 ms avg latency, 49240.0 ms max latency.
5 records sent, 0.9 records/sec (0.62 MB/sec), 51716.2 ms avg latency, 53756.0 ms max latency.
5 records sent, 0.9 records/sec (0.63 MB/sec), 53765.8 ms avg latency, 53848.0 ms max latency.
5 records sent, 0.9 records/sec (0.61 MB/sec), 53506.2 ms avg latency, 53731.0 ms max latency.
4 records sent, 0.8 records/sec (0.55 MB/sec), 53638.3 ms avg latency, 54029.0 ms max latency.
5 records sent, 0.9 records/sec (0.62 MB/sec), 53690.4 ms avg latency, 54003.0 ms max latency.
5 records sent, 0.9 records/sec (0.64 MB/sec), 53371.6 ms avg latency, 53703.0 ms max latency.
5 records sent, 0.9 records/sec (0.62 MB/sec), 52922.0 ms avg latency, 53008.0 ms max latency.
4 records sent, 0.7 records/sec (0.53 MB/sec), 53774.3 ms avg latency, 53805.0 ms max latency.
5 records sent, 0.9 records/sec (0.63 MB/sec), 53788.6 ms avg latency, 53827.0 ms max latency.
5 records sent, 0.9 records/sec (0.64 MB/sec), 53317.2 ms avg latency, 53698.0 ms max latency.
5 records sent, 0.8 records/sec (0.60 MB/sec), 53373.2 ms avg latency, 53406.0 ms max latency.
5 records sent, 0.9 records/sec (0.63 MB/sec), 53441.8 ms avg latency, 53476.0 ms max latency.
100 records sent, 0.816993 records/sec (0.58 MB/sec), 42056.90 ms avg latency, 54029.00 ms max latency, 52990 ms 50th, 53805 ms 95th, 54029 ms 99th, 54029 ms 99.9th.

消息在發送到 Kafka 之前被批處理。 批處理中的消息數量越多,單次發送的消息越多,吞吐量就越高。

如果您要增加消息大小,那么您還必須增加batch.size以便每個批次在其中分配更多數量的消息。

從您粘貼的代碼中,沒有設置 batch.size 的屬性,因此默認值為 16384 字節(16KB),遠小於您的消息大小(750 kb),這就是您看到 0.3 條記錄的原因/秒等。

batch.size 文檔中

不會嘗試批處理大於此大小的記錄。

因此,您可以嘗試增加batch.size以分配更多消息,例如 10Mb 左右並檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM