Kafka制作人表现不佳

oug3syen  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(276)

我和Kafka制作人有个问题。实际上,我使用的是spring kafka,通过kafkatemplate leke发送消息:

DefaultKafkaProducerFactory<K, V> defaultKafkaProducerFactory = new DefaultKafkaProducerFactory<>(producerParams);
KafkaTemplate kafkaTemplate = new KafkaTemplate<>(defaultKafkaProducerFactory);
RecordMetadata recordMetadata = kafkaTemplate.send(record).get().getRecordMetadata();

问题是有时发送消息需要4-20秒。有很多信息需要100毫秒才能发送。所以我有几个问题:
消息大小和吞吐量之间是否有关联,关系是什么?
我应该首先检查什么,也许我没有调好,任何方向?

yc0p9oo0

yc0p9oo01#

如果你有大量的数据,那么Kafka生产者需要一个性能调谐。在这种情况下,最好配置batch.size、linger.ms和buffer.memory。通常,在kafka中,batch.size的默认配置是16k字节。为了提高性能,只需增加batch.size。

props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16_384 * 4);
    // Send with little bit buffering
    props.put(ProducerConfig.LINGER_MS_CONFIG, 200);    
  //Use Snappy compression for batch compression.
    props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "snappy");

使用上述配置,性能必须良好。更多详情请参阅下面的链接。
Kafka表演

bn31dyow

bn31dyow2#

好的,实际上问题出在机器上,cpu太高,cloudera manager中有日志
在jvm或主机中检测到暂停(例如停止世界gc,或jvm未计划):暂停约4332ms:未检测到gc。
在jvm或主机中检测到暂停(例如,停止世界gc,或jvm未计划):暂停约10827毫秒:gc池“concurrentmarksweep”具有集合:计数=1时间=11107毫秒
当我在8核的机器上运行同样的程序时,问题就消失了。推荐的另一件事是增加代理的java堆大小

相关问题