卡夫卡生产者表现不佳
Kafka producer poor performance
我对卡夫卡生产者有疑问。实际上我正在使用 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 管理器中有日志
Detected pause in JVM or host machine (e.g. a stop the world GC, or
JVM not scheduled): paused approximately 4332ms: no GCs detected.
Detected pause in JVM or host machine (e.g. a stop the world GC, or
JVM not scheduled): paused approximately 10827ms: GC pool
'ConcurrentMarkSweep' had collection(s): count=1 time=11107ms
当我在 8 核机器上 运行 相同时 - 问题消失了。建议的另一件事是增加 Java Broker 的堆大小
如果您有大量数据,那么 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");
有了以上配置,性能肯定不错。您将在下面找到更多详细信息 link.
我对卡夫卡生产者有疑问。实际上我正在使用 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 管理器中有日志
Detected pause in JVM or host machine (e.g. a stop the world GC, or JVM not scheduled): paused approximately 4332ms: no GCs detected.
Detected pause in JVM or host machine (e.g. a stop the world GC, or JVM not scheduled): paused approximately 10827ms: GC pool 'ConcurrentMarkSweep' had collection(s): count=1 time=11107ms
当我在 8 核机器上 运行 相同时 - 问题消失了。建议的另一件事是增加 Java Broker 的堆大小
如果您有大量数据,那么 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");
有了以上配置,性能肯定不错。您将在下面找到更多详细信息 link.