请教下,用Java语言生产数据,通过回调函数确认数据已经发送完成,每次第一次发送,都要较长的时间才能进入回调函数,也不知道是本身发送耗时较长还是需要确认broker收到耗时较长,之后就很快了。
是因为类似第一次需要类似套接字建立长连接吗?
public void onCompletion(RecordMetadata metadata, Exception exception) {
//数据发送完成
}
从KafkaProducer.send
开始计时,进入onCompletion
回调结束计时,首次需要700-800
毫秒,然后第二次、第三次...往后都只需100-120毫秒左右
是的,kafka的生产者是长连接。
在发送前,kafka生产者会将要发送的消息进行打包成
批
。这2个参数会影响一部分的
真正
发送到kafka的时间,参数介绍参考:Kafka Producer配置其次,kafka是异步发送的,所以kafka可能已经接受并反馈了,但是接受也是异步的,你可以增加
.get()
将发送变为同步,看看效果:KafkaProducer.send(xxx).get();
ps:
.get
变更为同步,是非常影响性能的。你的答案