【问题标题】:Why Kafka consumer performance is slow?为什么Kafka消费者性能很慢?
【发布时间】:2015-09-06 16:47:32
【问题描述】:

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

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

在生产者中,一直发送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();
}

【问题讨论】:

  • 我已经运行 perf-consumer 测试进行测试,它给出了大约 30MB/s 的公平结果,但在我的情况下仍然是 0.2MB/s。
  • 您能否提供您所遵循的示例/示例的链接。
  • 我已经添加了我使用的代码,感谢您的回复!
  • 你最后解决了吗?我有一个类似的问题(使用 .NET 使用者)并发现调用消耗时刷新元数据大约需要 1 秒...
  • 关于这个的任何更新...类似的问题在我这边...

标签: java network-programming bigdata kafka-consumer-api apache-kafka


【解决方案1】:

尝试使用以下属性配置消费者。

  1. fetch.min.bytes
  2. fetch.max.wait.ms
  3. max.partition.fetch.bytes

另外,您可以调整poll() 方法的超时参数以提高吞吐量。

ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 2016-05-25
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多