我和kafka制作人有问题。其实我正在使用spring kafka,并通过KafkaTemplate发送消息:
DefaultKafkaProducerFactory<K, V> defaultKafkaProducerFactory = new DefaultKafkaProducerFactory<>(producerParams);
KafkaTemplate kafkaTemplate = new KafkaTemplate<>(defaultKafkaProducerFactory);
RecordMetadata recordMetadata = kafkaTemplate.send(record).get().getRecordMetadata();
问题是有时发送消息需要4-20秒。有很多消息需要100毫秒才能发送。所以我几乎没有问题:
好吧,实际上问题出现在机器上,cpu很高,Cloudera经理中有日志
检测到JVM或主机中的暂停(例如,停止世界GC或未安排的JVM):暂停约4332ms:未检测到GC。
检测到JVM或主机中的暂停(例如,停止世界GC或未安排的JVM):暂停大约10827ms:GC池'ConcurrentMarkSweep'有集合:count = 1 time = 11107ms
当我在具有8个核心的机器上运行相同时 - 问题就消失了。建议的另一件事是增加经纪人的Java堆大小
如果您拥有大量数据,那么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");
通过上述配置,性能必须良好。您可以在以下链接中找到更多详细信息。