Java 为什么卡夫卡消费表现缓慢?

Java 为什么卡夫卡消费表现缓慢?,java,network-programming,bigdata,kafka-consumer-api,apache-kafka,Java,Network Programming,Bigdata,Kafka Consumer Api,Apache Kafka,我有一个简单的主题,一个简单的卡夫卡消费者和生产者,使用默认配置 这个程序很简单,我有两个线程 在producer中,它不断发送16字节的数据 在消费者方面,它一直在接受 我发现生产商的吞吐量大约是10MB/s,这很好 但用户的吞吐量仅为0.2MB/s。我已经禁用了所有调试日志,但这并没有使它变得更好。测试正在本地计算机上运行。有人知道出了什么问题吗?谢谢 我使用的代码如下: 制作人: KafkaProducer producer = new KafkaProducer(props); int

我有一个简单的主题,一个简单的卡夫卡消费者和生产者,使用默认配置

这个程序很简单,我有两个线程

在producer中,它不断发送16字节的数据

在消费者方面,它一直在接受

我发现生产商的吞吐量大约是10MB/s,这很好

但用户的吞吐量仅为0.2MB/s。我已经禁用了所有调试日志,但这并没有使它变得更好。测试正在本地计算机上运行。有人知道出了什么问题吗?谢谢

我使用的代码如下: 制作人:

KafkaProducer producer = new KafkaProducer(props);
int size = 16;
byte[] payload = new byte[size];
String key = "key";
Arrays.fill(payload, (byte) 1);
ProducerRecord record = new ProducerRecord("test",0,key.getBytes(),payload);
while(true){
producer.send(record);
}
消费者:

Properties consumerProps = new Properties();
consumerProps.put("zookeeper.connect", "localhost:2181");
consumerProps.put("group.id", "test");
ConsumerConnector consumer = Consumer.createJavaConsumerConnector(new ConsumerConfig(consumerProps));
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put("test", 1);
Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
List<KafkaStream<byte[], byte[]>> streams = consumerMap.get("test");
ConsumerIterator<byte[], byte[]> it = streams.get(0).iterator();
while(it.hasNext()){
    it.next().message();
}
Properties consumerProps=新属性();
consumerProps.put(“zookeeper.connect”,“localhost:2181”);
consumerProps.put(“group.id”、“test”);
ConsumerConnector consumer=consumer.createJavaConsumerConnector(新的ConsumerConfig(consumerProps));
Map topicCountMap=新HashMap();
topicCountMap.put(“测试”,1);
Map consumerMap=consumer.createMessageStreams(topicCountMap);
列表流=consumerMap.get(“测试”);
ConsumerIterator it=streams.get(0.iterator();
while(it.hasNext()){
it.next().message();
}

尝试使用以下属性配置使用者

  • fetch.min.bytes
  • fetch.max.wait.ms
  • max.partition.fetch.bytes
  • 此外,您还可以为吞吐量调整
    poll()
    方法的超时参数

    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    
    ConsumerRecords records=consumer.poll(持续时间:百万分之一百);
    
    我已经运行了perf consumer测试进行测试,它给出了大约30MB/s的公平结果,但在我的情况下仍然是0.2MB/s。您能否提供指向您遵循的示例/示例的链接。我已经添加了我使用的代码,感谢您的回复!你最终解决了这个问题吗?我有一个类似的问题(使用.NET消费者),发现在调用consume时刷新元数据大约需要1s…对此的任何更新…我这边也有类似的问题。。。