标准答案
- 较弱确认延迟低但在节点故障时可能丢消息;等待更多副本确认会增加延迟和失败概率,却能缩小已确认消息丢失的窗口。
- 发送超时并不等于消息未写入。Producer 重试可能让同一逻辑消息被写入多次,应用需要稳定的消息 ID、幂等生产配置或去重语义。
- 幂等生产者通常能处理同一生产会话内的重复发送,但不能自动保证跨重启、跨业务事务或消费端外部副作用的恰好一次。
- 发送端应限制重试次数、设置退避和可观测错误分类;对不可安全重试的操作,需要先持久化业务意图或改用 Outbox。
题目解析
可靠发送的核心是面对不确定响应:网络断开时发送方无法立即知道 Broker 是否收到消息。不能依靠“只发一次”避免重复,只能依靠可识别、可去重的逻辑消息。
端到端正确性需要发送端、Broker、消费者和业务库一起设计。Producer 的配置只是其中一环,不能替代消费端幂等。
常见误区
- 发送超时后永不重试,或无限立即重试压垮 Broker。
- 开启幂等生产者后就删除消费者的去重和幂等保护。