我和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毫秒才能发送。所以我有几个问题:
消息大小和吞吐量之间是否有关联,关系是什么?
我应该首先检查什么,也许我没有调好,任何方向?
2条答案
按热度按时间yc0p9oo01#
如果你有大量的数据,那么Kafka生产者需要一个性能调谐。在这种情况下,最好配置batch.size、linger.ms和buffer.memory。通常,在kafka中,batch.size的默认配置是16k字节。为了提高性能,只需增加batch.size。
使用上述配置,性能必须良好。更多详情请参阅下面的链接。
Kafka表演
bn31dyow2#
好的,实际上问题出在机器上,cpu太高,cloudera manager中有日志
在jvm或主机中检测到暂停(例如停止世界gc,或jvm未计划):暂停约4332ms:未检测到gc。
在jvm或主机中检测到暂停(例如,停止世界gc,或jvm未计划):暂停约10827毫秒:gc池“concurrentmarksweep”具有集合:计数=1时间=11107毫秒
当我在8核的机器上运行同样的程序时,问题就消失了。推荐的另一件事是增加代理的java堆大小