Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Provides control over timestamp value of records published to Kafka output topic.
Some context below:
Q: How this functionality is different than
ITimestampExtractor
applied to a source stream orIKStream<K, V>.WithRecordTimestamp
applied to some existing stream?A: In simple scenarios either method can be used to provide timestamps for the records sent to the output topic.
For example
ITimestampExtractor
provides the initial value forRecordContext.Timestamp
, whereasIKStream<K, V>.WithRecordTimestamp
can override that value later.However in some scenarios you might need more grained control over what timestamp is applied to the output topic records and change that timestamp without affecting the
RecordContext.Timestamp
of underlying stream.Example with pseudo code which WON'T WORK:
This basically will break your join because applying
joinedStream.WithRecordTimestamp(utcNow)
will override the timestamp inRecordContext.Timestamp
and value stored byKStreamJoinWindowProcessor
into thewindow
store will be utcNow as all topology processors are executed first:The solution I came up with is to bring the desired
timestamp
value directly toSinkProcessor
without touching the value inRecordContext.Timestamp
at all.Example with pseudo code which WORKS with changes proposed by this PR: