卡夫卡生产者表现不佳

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 毫秒才能发送。所以我有几个问题:

  1. 消息大小和吞吐量之间是否存在相关性,是什么关系?

  2. 首先应该检查什么,可能是我调的没做好,有什么方向吗?

好的,实际上问题出在机器上,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.

Kafka Performance