【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 返回确认,生产者处理结果(同步阻塞或异步回调)。

总结

  • 同步发送:适合高可靠性场景,确保消息不丢失,性能较低。
  • 异步发送:适合高吞吐量场景,性能高,但需注意处理异常。
  • 实际开发中可以结合使用:对关键消息同步发送,普通数据异步发送。
相关推荐
独行侠影a5 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
香菜TTT8 小时前
Kafka_深度解析_从架构原理到生产实践
分布式·架构·kafka·linq
zcmodeltech13 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
wWYy.14 小时前
基于Raft分布式Kv存储:RPC调用
分布式·rpc
笨蛋不要掉眼泪14 小时前
RabbitMQ消息队列:SpringAMQP
java·分布式·rabbitmq
发量惊人的中年网工15 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
java1234_小锋15 小时前
【免费】基于Spark实时金融交易风险监控与预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
大数据·spark·kafka·金融交易风险监控与预测
段一凡-华北理工大学15 小时前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
梦想画家16 小时前
FilePulse:Kafka Connect 的“智能文件网关”,重塑数据接入新范式
kafka·文件连接器·filepulse
Devin~Y16 小时前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag