【问题标题】:Kafka producer poor performanceKafka生产者表现不佳
【发布时间】:2018-10-13 07:27:57
【问题描述】:

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

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

  2. 我应该首先检查什么,也许我没有做好调整,有什么方向吗?

【问题讨论】:

  • 也许您的发件人设置了 batch.size 并且 linger.ms 很高?
  • linger.ms = 0 ack = all
  • 我看到有时有应用程序的机器上的 CPU 达到 70-85%,kafka 在同一台机器上。也许是因为这个。我该如何检查?

标签: apache-kafka messaging producer-consumer kafka-producer-api spring-kafka


【解决方案1】:

好的,实际上问题出在机器上,cpu 太高,Cloudera manager 中有日志

在 JVM 或主机中检测到暂停(例如,停止世界 GC,或 JVM 未调度):暂停大约 4332 毫秒:未检测到 GC。

在 JVM 或主机中检测到暂停(例如,停止世界 GC,或 JVM 未调度):暂停大约 10827 毫秒:GC 池 'ConcurrentMarkSweep' 有集合:count=1 time=11107ms

当我在 8 核机器上运行相同的程序时 - 问题就消失了。另一件被推荐的事情是增加Java Heap Size of Broker

【讨论】:

    【解决方案2】:

    如果您有大量数据,那么 Kafka 生产者需要进行性能调整。在这种情况下,最好配置 batch.sizelinger.msbuffer.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 Performance

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2013-01-23
      • 2019-10-31
      • 2016-01-15
      相关资源
      最近更新 更多