【kafka】生产者的同步发送和异步发送

Kafka 的生产者端提供了同步发送和异步发送两种方式,适合不同的使用场景和性能需求。

以下是两种发送模式的详细讲解:

同步发送

概念

  • 同步发送是指生产者在发送一条消息后,会阻塞当前线程,等待 Kafka 返回发送结果(成功或失败)。

实现原理

  • 生产者通过调用 send() 方法发送消息,并使用 Future.get() 方法等待结果。
  • 在 Kafka 确认消息写入分区或抛出异常之前,线程会阻塞。

代码示例

java 复制代码
ProducerRecord<String, String> record = new ProducerRecord<>("topicName", "key", "value");
try {
    RecordMetadata metadata = producer.send(record).get();
    System.out.println("消息发送成功: " + metadata.toString());
} catch (Exception e) {
    e.printStackTrace();
}

优点

  1. 高可靠性:确保每条消息成功发送。
  2. 易调试:便于发现和处理异常。

缺点

  1. 性能较低:每次发送需等待服务器响应,吞吐量低。
  2. 线程阻塞:延迟高时影响应用性能。

适用场景

  • 对消息可靠性要求高的场景,如事务性操作、支付系统。

异步发送

概念

  • 异步发送是指生产者发送消息时不等待结果,而是立即返回,发送结果通过回调函数通知。

实现原理

  • 调用 send() 方法时提供回调函数(Callback)。
  • Kafka 在发送成功或失败时调用回调函数。

代码示例

java 复制代码
ProducerRecord<String, String> record = new ProducerRecord<>("topicName", "key", "value");
producer.send(record, (metadata, exception) -> {
    if (exception != null) {
        System.err.println("消息发送失败: " + exception.getMessage());
    } else {
        System.out.println("消息发送成功: " + metadata.toString());
    }
});

优点

  1. 性能高:非阻塞,快速发送大量消息。
  2. 灵活:通过回调函数异步处理结果。

缺点

  1. 可靠性较低:可能存在消息丢失。
  2. 调试复杂:需要通过回调函数处理异常。

适用场景

  • 高吞吐量场景,如实时日志、大数据流。

同步与异步对比

特性 同步发送 异步发送
性能 低 高
可靠性 高 较低
阻塞 是 否
实现复杂度 简单 较复杂
场景 消息可靠性要求高 吞吐量要求高

Kafka Producer 发送过程

  1. 序列化:将消息的 Key 和 Value 序列化。
  2. 分区选择:根据分区策略决定目标分区。
  3. 缓冲区写入:消息进入生产者缓冲区,等待批量发送。
  4. 网络传输:消息通过网络发送到 Kafka Broker。
  5. 消息确认:Kafka 返回确认,生产者处理结果(同步阻塞或异步回调)。

总结

  • 同步发送:适合高可靠性场景,确保消息不丢失,性能较低。
  • 异步发送:适合高吞吐量场景,性能高,但需注意处理异常。
  • 实际开发中可以结合使用:对关键消息同步发送,普通数据异步发送。
相关推荐
Pniubi31 分钟前
分布式锁分类讲解
分布式
nvd112 小时前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
我不是阵雨3 小时前
分布式事务难题与实战解法全解析
分布式·微服务·架构
song5013 小时前
React Native for OpenHarmony 实战:三方库 react-native-parallax-scroll-view 的鸿蒙化适配指南
分布式·react native·react.js·transformer·harmonyos
做个文艺程序员5 小时前
MQ第03篇:RabbitMQ进阶实战:Topic路由+死信队列+延迟消息,SaaS订单超时取消完整方案
分布式·消息队列·rabbitmq·死信队列·延迟队列
风花一世月6 小时前
[特殊字符] 我把一套分布式消防方案做成了能跑的 3D 沙盘(三架无人机共用一根水带,在线直接玩)
分布式·3d·ai·无人机
我不是阵雨8 小时前
如何拿捏分布式四大模式?
分布式
吴声子夜歌10 小时前
Docker入门与实战——实战案例(分布式处理与大数据平台)
大数据·分布式·docker
bksczm10 小时前
Redis基础篇之初识分布式
数据库·redis·分布式
此时不提桶,更待何时19 小时前
06-18-A-RabbitMQ消息特性与消费机制详解
分布式·rabbitmq