KafkaTemplate默认是异步发送
异步发送:
代码使用:
kafkaTemplate.send(topic,message);
其中topic,message是范指。
原理:
异步发送消息时,只要消息积累达到batch.size值或者积累消息的时间超过linger.ms(二者满足其一),producer就会把该批量的消息发送到topic中。
注:batch.size默认是16384,linger.ms默认是0
同步发送:
代码使用:
kafkaTemplate.send(topic,message).get();
原理:
同步发送消息时,需要在每次send()方法调用get()方法,因为每次send()方法会返回一个Future类型的值,Future的get()方法会一直阻塞,知道该线程的任务获取到返回值,即当消息发送成功。
异步发送消息回调
ListenableFuture<SendResult<String, Message>> future = kafkaTemplate.send("testJson", message);
future.addCallback(new ListenableFutureCallback<SendResult<String, Message>>() {
//发送消息成功回调
@Override
public void onSuccess(SendResult<String, Message> result) {
System.out.println(result.getProducerRecord());
//getRecordMetadata里面存在发送的topic和partition等信息
System.out.println(result.getRecordMetadata());
}
//发送消息失败回调
@Override
public void onFailure(Throwable ex) {
ex.printStackTrace();
}
});