Table of Contents |
---|
Status
Current state: "Under Discussion"
...
Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).
Motivation
Kafka 0.10 added the Timestamp as part of messages, which is particularly important for KStreams application. Currently that timestamp can be set by the broker, or by the producer. This addresses concerns with timestamps set at the producer level.
Currently, if the producer application does not join a timestamp to the ProducerRecord, such as in public ProducerRecord(String topic, K key, V value) , then the timestamp is inferred at send time being System.currentTimeMillis(). If a producer wants to explicitly set a timestamp for the record, it has got to use public ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value).
...
This KIP adds the missing constructor to add a Timestamp to a ProducerRecord or a SourceRecord.
Public Interfaces
The ProducerRecord constructors will all be deprecated, except the main long explicit one:
New interface:
public SourceRecord(Map<String, ?> sourcePartition, Map<String, ?> sourceOffset,
String topic, Schema valueSchema, Object value, Long timestamp)
...
public ProducerRecord(String topic, K key, V value, Long timestamp)
Proposed Changes
See KAFKA-5092
Compatibility, Deprecation, and Migration Plan
- No deprecation
- No migration needed for existing programs
Rejected Alternatives
- public ProducerRecord(String topic, Long timestamp, K key, V value)
...