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

总结

  • 同步发送:适合高可靠性场景,确保消息不丢失,性能较低。
  • 异步发送:适合高吞吐量场景,性能高,但需注意处理异常。
  • 实际开发中可以结合使用:对关键消息同步发送,普通数据异步发送。
相关推荐
是Dream呀5 小时前
Harness 工程:让 Agent 真正把任务做完
人工智能·分布式·缓存·agent
yt004yt5 小时前
绿岛数字化平台搭建:VOCs 监测与能碳数据一体化方案
大数据·分布式
天天喝旺仔7 小时前
分布式服务容错实战:用 Sentinel 实现限流、熔断与降级
分布式·微服务·云原生·sentinel
音符犹如代码8 小时前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
java·大数据·ai·kafka
happy_king_zi9 小时前
kafka两种部署模式的区别
kafka·消息队列·sre
happy_king_zi9 小时前
Kafka 3.9.2 KRaft 模式三节点集群完整部署指南
kafka·消息队列
明快de玄米619 小时前
Kafka 可靠消息投递:核心机制总结
kafka
lisanmengmeng9 小时前
分布式追踪与监控:Skywalking(三)
分布式·skywalking
明快de玄米6111 小时前
Kafka:基于 Outbox 的可靠消息投递完整方案
kafka
会周易的程序员18 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识