首页 > 解决方案 > Kafka producer Bench-marking,无法理解结果

问题描述

我正在对 Kafka 生产者进行简单的基准测试。我的集群有 3 个 Kafka 代理。我创建了 2 个主题。

topic_one : 1 分区 1 复制

topic_two : 3 分区 1 复制

我编写了一些代码 eclipse 来向该主题发送消息。向两个主题发送 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();

标签: apache-kafka

解决方案


推荐阅读