Kafka Java程序启动首次产生数据很慢

lene 发表于: 2022-05-09   最后更新时间: 2022-05-11 14:59:59   1,581 游览

请教下,用Java语言生产数据,通过回调函数确认数据已经发送完成,每次第一次发送,都要较长的时间才能进入回调函数,也不知道是本身发送耗时较长还是需要确认broker收到耗时较长,之后就很快了。

是因为类似第一次需要类似套接字建立长连接吗?

public void onCompletion(RecordMetadata metadata, Exception exception) {
    //数据发送完成
}

KafkaProducer.send开始计时,进入onCompletion回调结束计时,首次需要700-800毫秒,然后第二次、第三次...往后都只需100-120毫秒左右

发表于 2022-05-09

是的,kafka的生产者是长连接。

在发送前,kafka生产者会将要发送的消息进行打包成

  • linger.ms
  • batch.size

这2个参数会影响一部分的真正发送到kafka的时间,参数介绍参考:Kafka Producer配置

其次,kafka是异步发送的,所以kafka可能已经接受并反馈了,但是接受也是异步的,你可以增加.get()将发送变为同步,看看效果:

KafkaProducer.send(xxx).get();

ps:.get变更为同步,是非常影响性能的。

你的答案

查看kafka相关的其他问题或提一个您自己的问题