推荐答案
在 Kafka 中,同步发送和异步发送的主要区别在于消息发送的等待机制和性能表现:
- 同步发送:生产者发送消息后会阻塞,直到收到 Kafka 服务器的确认(ACK)。这种方式确保消息成功发送,但会降低吞吐量。
- 异步发送:生产者发送消息后不会阻塞,而是通过回调函数处理发送结果。这种方式提高了吞吐量,但可能丢失消息。
本题详细解读
同步发送
- 工作机制:生产者调用
send()方法后,会等待 Kafka 服务器的响应(ACK)。只有在收到确认后,生产者才会继续发送下一条消息。 - 优点:确保消息成功发送到 Kafka,适合对数据可靠性要求高的场景。
- 缺点:由于需要等待响应,吞吐量较低,延迟较高。
异步发送
- 工作机制:生产者调用
send()方法后,立即返回,不会等待 Kafka 服务器的响应。发送结果通过回调函数(Callback)处理。 - 优点:提高了吞吐量,适合高并发场景。
- 缺点:可能丢失消息,适合对数据可靠性要求不高的场景。
使用场景
- 同步发送:适用于需要确保消息成功发送的场景,如金融交易、订单处理等。
- 异步发送:适用于高吞吐量、低延迟的场景,如日志收集、实时监控等。
代码示例
// www.javascriptcn.com code example
// 同步发送
ProducerRecord<String, String> record = new ProducerRecord<>("topic", "key", "value");
producer.send(record).get(); // 阻塞等待
// 异步发送
producer.send(record, (metadata, exception) -> {
if (exception != null) {
exception.printStackTrace();
} else {
System.out.println("消息发送成功: " + metadata.offset());
}
});