Kafka主题中的分区数越多吞吐量就越高?BULLSHIT!!!
歡迎跳轉(zhuǎn)到本文原文地址:https://honeypps.com/mq/is-that-the-more-partitions-in-kafka-topic-the-higher-throughout/
分區(qū)是Kafka中最小的并行操作單元,對(duì)于生產(chǎn)者而言,對(duì)于每一個(gè)分區(qū)的數(shù)據(jù)寫(xiě)入是完全可以并行化的;對(duì)于消費(fèi)者而言,Kafka只允許單個(gè)分區(qū)中的消息被一個(gè)消費(fèi)者線程所消費(fèi),一個(gè)消費(fèi)組的消費(fèi)并行度完全依賴于所消費(fèi)的分區(qū)數(shù)。如此看來(lái),如果一個(gè)主題中的分區(qū)數(shù)越多,理論上所能達(dá)到的吞吐量就越大,那么事實(shí)真的如預(yù)想的一樣么?
不妨我們使用kafka-producer-perf-test.sh腳本和kafka-consumer-perf-test.sh腳本這兩個(gè)性能測(cè)試工具來(lái)實(shí)際地測(cè)試一下。首先我們分別創(chuàng)建分區(qū)數(shù)為1、20、50、100、200、500、1000的主題,對(duì)應(yīng)的主題名稱分別為topic-1、topic-20、topic-50、topic-100、topic-200、topic-500、topic-1000,所有主題的副本因子都設(shè)置為1。
消息中間件的性能一般是指吞吐量。拋開(kāi)硬件資源的影響,消息寫(xiě)入的吞吐量還會(huì)受到消息大小、消息壓縮方式、消息發(fā)送方式(同步/異步)、消息確認(rèn)類型(acks)、副本因子等參數(shù)的影響,消息消費(fèi)的吞吐量還會(huì)受到應(yīng)用邏輯處理速度的影響。本次案例中暫不考慮這些因素的影響,所有的測(cè)試除了主題的分區(qū)數(shù)不同之外,其余的因素都保持相同。
本次案例中所使用的測(cè)試環(huán)境為一個(gè)由3臺(tái)普通云主機(jī)組成的3節(jié)點(diǎn)的Kafka集群,每臺(tái)云主機(jī)內(nèi)存8G、磁盤(pán)40GB、4核CPU主頻為2600MHz。JVM版本為1.8.0_112,Linux系統(tǒng)版本為2.6.32-504.23.4.el6.x86_64。
使用kafka-producer-perf-test.sh腳本分別往這些主題中發(fā)送100萬(wàn)條消息體大小為1KB的消息,相對(duì)應(yīng)的測(cè)試命令如下:
bin/kafka-producer-perf-test.sh --topic topic-xxx --num-records 1000000 --record-size 1024 --throughput 100000000 --producer-props bootstrap.servers=localhost:9092 acks=1相對(duì)應(yīng)的測(cè)試結(jié)果如下圖所示。對(duì)于不同的硬件環(huán)境,甚至不同批次的測(cè)試得到的測(cè)試結(jié)果也不會(huì)完全相同,但是總體趨勢(shì)還是會(huì)保持和圖中的一樣。
在上圖中,我們可以看到分區(qū)數(shù)為1時(shí)吞吐量最低,隨著分區(qū)數(shù)的增長(zhǎng),相應(yīng)的吞吐量也跟著上漲。一旦分區(qū)數(shù)超過(guò)了某個(gè)閾值之后整體的吞吐量是不升反降的,也就是說(shuō)并不是分區(qū)數(shù)越多吞吐量也就越大。這里的分區(qū)數(shù)臨界閾值針對(duì)不同的測(cè)試環(huán)境也會(huì)表現(xiàn)出不同的結(jié)果,實(shí)際應(yīng)用中可以通過(guò)類似的測(cè)試案例來(lái)找到一個(gè)合理的臨界值區(qū)間。
上面針對(duì)的是消息生產(chǎn)者的測(cè)試,對(duì)于消息消費(fèi)者而言同樣也有吞吐量方面的考量。使用kafka-consumer-perf-test.sh腳本分別消費(fèi)這些主題中的100萬(wàn)條消息,相對(duì)應(yīng)的測(cè)試命令如下:
bin/kafka-consumer-perf-test.sh --topic topic-xxx --messages 1000000 --broker-list localhost:9092消費(fèi)者性能測(cè)試的結(jié)果如下圖所示。與生產(chǎn)者性能測(cè)試相同的是,對(duì)于不同的測(cè)試環(huán)境或者不同的測(cè)試批次所得到的測(cè)試結(jié)果也不盡相同,但總體趨勢(shì)還是會(huì)保持和圖中的一樣。
在上圖中,開(kāi)始隨著分區(qū)數(shù)的增加相應(yīng)的吞吐量也會(huì)有多增長(zhǎng)。一旦分區(qū)數(shù)超過(guò)了某個(gè)閾值之后整體的吞吐量也同樣是不升反降的,同樣說(shuō)明了分區(qū)數(shù)越多并不會(huì)使得吞吐量一直增長(zhǎng)。
分區(qū)數(shù)越多吞吐量也就越高?很多資料都認(rèn)可這一觀點(diǎn),但實(shí)際上很多事情都會(huì)有一個(gè)臨界值,當(dāng)超過(guò)這個(gè)臨界值之后,很多原本符合既定邏輯的走向又會(huì)變得不同。讀者需要對(duì)此有個(gè)清晰的認(rèn)知,懂得去偽求真,而實(shí)地測(cè)試驗(yàn)證不失為一座通向真知的橋梁。
歡迎跳轉(zhuǎn)到本文原文地址:https://honeypps.com/mq/is-that-the-more-partitions-in-kafka-topic-the-higher-throughout/
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。
總結(jié)
以上是生活随笔為你收集整理的Kafka主题中的分区数越多吞吐量就越高?BULLSHIT!!!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为了追求极致的性能,Kafka掌控这11
- 下一篇: 微服务架构之「 下一代微服务 Servi