卡夫卡制片人基准测试,结果毫无道理

时间:2018-07-23 08:53:29

标签: apache-kafka

我正在对卡夫卡制片人做一个简单的基准测试。 我的集群有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

我对结果感到困惑。 从本文了解到,拥有更多分区确实可以提高吞吐量。

https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

但是对于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();

0 个答案:

没有答案