我正在对卡夫卡制片人做一个简单的基准测试。 我的集群有3个Kafka经纪人。 我创建了2个主题。
topic_one:1个分区1个复制
topic_two:3个分区1复制
我写了一些日食代码来向该主题发送消息。 向这两个主题发送100,000条消息(每个消息1kB)(模式:同步)
topic_one需要33s〜34s
topic_two耗时65s〜68s
接下来,我打开另一个Eclipse并同时运行两个应用程序,以模拟同时发送2个生产者客户端。 向这两个主题发送100,000条消息(每个消息1kB)(模式:同步)
topic_one花费39s〜43s
topic_two耗时53s〜54s
我对结果感到困惑。 从本文了解到,拥有更多分区确实可以提高吞吐量。
但是对于topic_two,当我使用2个客户端时,与单独运行1个客户端相比,这两个客户端的时机更好。
100MB / 65s〜68s VS 200MB / 53s〜54s
我知道,这种基准测试方法并不完全准确,因为两个应用程序都是通过同一网络端口发送的。但是我仍然无法理解结果。
结果是预期的吗?还是我做错了?
任何帮助我了解Kafka中分区的文章/链接也将不胜感激。 谢谢!
代码:
long startTime;
long endTime;
int messageNo = 0;
startTime = System.currentTimeMillis();
while (messageNo < 100000) {
try {
producer.send(new ProducerRecord<>(topic,
messageNo,
messageStr)).get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
// handle the exception
}
++messageNo;
}
endTime = System.currentTimeMillis();