遇到一个业务上的情况,在压力很大的情况下,某个topic的消息出现了小部分的冗余,发送端采用async模式。不确定kafka的async模式发送消息是否也会重试,文档里提到async模式发送增加了丢消息的可能,不知道message.send.max.retries
参数是否也会起作用,群里讨论了一下,晚上跟踪了一下代码发现也是有 retry 的。
在 kafka.producer.async.DefaultEventHandler
的handle
方法里
while (remainingRetries > 0 && outstandingProduceRequests.size > 0) {
......
}
看来不论同步还是异步发送,消息重复的可能都是存在的。