[ https://issues.apache.org/jira/browse/KAFKA-14991?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Divij Vaidya resolved KAFKA-14991. ---------------------------------- Resolution: Fixed > Improving Producer's record timestamp validation > ------------------------------------------------ > > Key: KAFKA-14991 > URL: https://issues.apache.org/jira/browse/KAFKA-14991 > Project: Kafka > Issue Type: Improvement > Components: core, log > Reporter: Mehari Beyene > Assignee: Mehari Beyene > Priority: Minor > Fix For: 3.6.0 > > > When time-based retention is configured, the timestamp provided by the > producer is used by default to determine the retention period of the log. > Customers have the option of changing the configuration to use the broker's > timestamp by overriding the configuration for "log.message.timestamp.type", > but by default, the producer's timestamp is used. The producer's record > timestamp can be in the past or future. Kafka determines the retention time > of the log by comparing the broker's time with the record's time. > Arguably, there can be use cases for a producer to send records with > timestamps that are in the past (for example, for replaying old data), but it > is inaccurate for records to have a timestamp that is far in the future > compared to the broker's current time. > There is a configurable property called "message.timestamp.difference.max.ms" > that customers can use to control the allowed time difference between the > broker's current time and the record timestamp. However, the validation from > the Kafka code side can be improved by rejecting records with future > timestamps from being written in the first place. > Customers have run into this issue in the past where a producer is configured > erroneously to set the record timestamp in nanoseconds instead of > milliseconds, resulting in a record timestamp that is in the future, and the > time-based retention policy did not kick in as expected. > The improvement I am proposing is to add basic validation in > org.apache.kafka.storage.internals.log.LogValidator to reject record > timestamps that are in the future compared to the broker current timestamp > after accounting for a sensible tolerance for potential clock skew. -- This message was sent by Atlassian Jira (v8.20.10#820010)