Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 卡夫卡制作人标杆,无法解释结果_Apache Kafka - Fatal编程技术网

Apache kafka 卡夫卡制作人标杆,无法解释结果

Apache kafka 卡夫卡制作人标杆,无法解释结果,apache-kafka,Apache Kafka,我正在做一个卡夫卡制作人的简单基准测试。 我的集群有3个卡夫卡代理。 我创建了两个主题 主题1:1分区1复制 主题二:3分区1复制 我编写了一些eclipse代码来向主题发送消息。 向两个主题发送100000条消息(每条1kB)(模式:同步) 题目1分33秒~34秒 主题二需要65秒~68秒 接下来,我打开另一个eclipse并同时运行这两个应用程序,以模拟同时发送2个producer客户端。 向两个主题发送100000条消息(每条1kB)(模式:同步) 题目1取39s~43s 主题二需要53秒

我正在做一个卡夫卡制作人的简单基准测试。 我的集群有3个卡夫卡代理。 我创建了两个主题

主题1:1分区1复制

主题二:3分区1复制

我编写了一些eclipse代码来向主题发送消息。 向两个主题发送100000条消息(每条1kB)(模式:同步)

题目1分33秒~34秒

主题二需要65秒~68秒

接下来,我打开另一个eclipse并同时运行这两个应用程序,以模拟同时发送2个producer客户端。 向两个主题发送100000条消息(每条1kB)(模式:同步)

题目1取39s~43s

主题二需要53秒~54秒

我对结果有点困惑。 从本文中可以理解,拥有更多的分区确实会增加吞吐量

但是对于topic_two,当我使用2个客户端时,与单独运行1个客户端相比,这两个客户端都有更好的时间安排

100MB/65s~68s与200MB/53s~54s的对比

我理解,这种基准点标记方式并不完全准确,因为两个应用程序都是通过同一网络端口发送的。但我还是无法理解结果

结果是预期的吗?还是我做错了

任何帮助我理解卡夫卡分区的文章/链接也将不胜感激。 谢谢

代码:

长启动时间;
长时间;
int messageNo=0;
startTime=System.currentTimeMillis();
while(messageNo<100000){
试一试{
生产商发送(新生产商记录)(主题,
信息否,
messageStr().get();
}捕获(中断异常|执行异常e){
e、 printStackTrace();
//处理异常
}
++messageNo;
}
endTime=System.currentTimeMillis();

每个分区是否位于单独的代理上?如果您同时运行这两个程序,这是否意味着您发送的数据量是假设100000是硬编码的数据量的两倍?顺便说一下,卡夫卡有一个内置的性能测试仪
kafka producer perf test.sh
…是的,分区位于不同的代理上。我试着在topic_2上使用一个应用程序处理200000条消息,时间大约是处理100000条消息的2倍。哦,我不知道有一个内置的性能测试仪。谢谢我一定会测试的。你能展示一下你的代码吗?很难告诉你,你是在两个应用程序中发送了50k条消息,总共发送了100k条消息,还是在没有更改的情况下运行了两次第一个100k应用程序。我在帖子中添加了代码,但忽略了属性,因为它只是设置bootstrap.servers、key.serializer和value.serializer。这是一个我参考的简单程序。我做了一些小改动来发送固定数量的消息。我目前只测试同步。我所做的是复制同一个项目并在另一个eclipse上运行,由于我需要在两个eclipse上单击“运行”按钮,所以在启动时间之间有一点延迟。这能模拟两个应用程序同时运行吗?还是完全错了?是的,它发送了20万条消息,让我好奇的是,发送20万条消息的时间比发送10万条消息快。但是,正如您所评论的,最好在两个线程中运行它,这样可能会更好。我已经测试了性能测试仪,它给了我很好的基准测试结果。非常感谢你的帮助。
  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();