You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用KafkaTemplate循环发送消息时是否会丢失消息?

KafkaTemplate在Broker故障恢复后的消息处理逻辑

前提场景

使用Spring Boot的KafkaTemplate以循环方式发送消息:

list.forEach(value -> kafkaTemplate.send(topic, value));

生产者配置acks=1,单Broker环境,发送过程中第n条消息开始Broker无法返回确认,第n+k条消息发送时Broker恢复正常。

具体处理逻辑

  • 未成功消息的缓存与自动重试:Kafka生产者客户端默认开启重试机制,当Broker无法返回ack时,第n至n+k-1条消息不会被直接丢弃,而是暂存在生产者的内存缓冲区中。生产者会按照配置的重试间隔(默认retry.backoff.ms=100)自动重试发送这些消息,直到发送成功或达到重试次数上限(默认retries=2147483647,即无限重试)。
  • Broker恢复后的发送顺序:当Broker恢复正常后,生产者后台线程会优先处理缓冲区中未发送成功的消息,待这些消息得到Broker确认后,才会继续处理后续的第n+k条消息(若第n+k条消息已被加入缓冲区,会按照队列顺序等待前置消息处理完成后再发送)。
  • 消息丢失的触发条件:只有当重试次数耗尽且Broker仍未恢复时,未成功的消息才会丢失(此时可通过ListenableFuture捕获失败回调)。默认配置下重试次数极高,只要Broker能在合理时间内恢复,消息不会丢失。

内容的提问来源于stack exchange,提问作者Mikhail Geyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:10:45