如果生产者进行重试,两条消息的时间戳是否相同?

If the producer performs a retry, will the two messages have the same timestamp?

At-least-once语义:如果producer收到来自Kafka broker的确认(ack)并且acks=all,这意味着消息只被写入了一次到Kafka主题。但是,如果生产者确认超时或收到错误,它可能会假设消息未写入 Kafka 主题,然后重试发送消息。如果代理在发送 ack 之前失败,但在消息成功写入 Kafka 主题之后,此重试导致消息被写入两次,因此不止一次地传递到最终消费者。

我知道时间戳是根据生产者发送消息的时间设置的。 如果生产者重试,两条消息的时间戳是否相同?

默认情况下,时间戳是在记录创建时设置的。所以,是的,如果生产者执行重试,则重复项具有相同的时间戳。

如果您将 message.timestamp.type 设置为 LogAppendTime,则重复项将具有不同的时间戳,每条记录的时间戳将是代理将其附加到日志的有效时间。