Package org.apache.kafka.streams.kstream
Class JoinWindows
public class JoinWindows extends Windows<Window>
The window specifications used for joins.
A JoinWindows instance defines a maximum time difference for a join over two streams on the same key.
In SQL-style you would express this join as
SELECT * FROM stream1, stream2
WHERE
stream1.key = stream2.key
AND
stream1.ts - before <= stream2.ts AND stream2.ts <= stream1.ts + after
There are three different window configuration supported:
- before = after = time-difference
- before = 0 and after = time-difference
- before = time-difference and after = 0
Both values (before and after) must not result in an "inverse" window, i.e., upper-interval bound cannot be smaller than lower-interval bound.
JoinWindows are sliding windows, thus, they are aligned to the actual record timestamps.
This implies, that each input record defines its own window with start and end time being relative to the record's
timestamp.
For time semantics, see TimestampExtractor.
- See Also:
TimeWindows,UnlimitedWindows,SessionWindows,KStream.join(KStream, ValueJoiner, JoinWindows),KStream.join(KStream, ValueJoiner, JoinWindows, StreamJoined),KStream.leftJoin(KStream, ValueJoiner, JoinWindows),KStream.leftJoin(KStream, ValueJoiner, JoinWindows, StreamJoined),KStream.outerJoin(KStream, ValueJoiner, JoinWindows),KStream.outerJoin(KStream, ValueJoiner, JoinWindows, StreamJoined),TimestampExtractor
-
Field Summary
Fields Modifier and Type Field Description longafterMsMaximum time difference for tuples that are after the join tuple.longbeforeMsMaximum time difference for tuples that are before the join tuple.protected booleanenableSpuriousResultFixFields inherited from class org.apache.kafka.streams.kstream.Windows
DEPRECATED_DEFAULT_24_HR_GRACE_PERIOD, NO_GRACE_PERIOD -
Constructor Summary
Constructors Modifier Constructor Description protectedJoinWindows(JoinWindows joinWindows) -
Method Summary
Modifier and Type Method Description JoinWindowsafter(Duration timeDifference)Changes the end window boundary totimeDifferencebut keep the start window boundary as is.JoinWindowsbefore(Duration timeDifference)Changes the start window boundary totimeDifferencebut keep the end window boundary as is.booleanequals(Object o)JoinWindowsgrace(Duration afterWindowEnd)Reject out-of-order events that are delayed more thanafterWindowEndafter the end of its window.longgracePeriodMs()Return the window grace period (the time to admit out-of-order events after the end of the window.) Delay is defined as (stream_time - record_timestamp).inthashCode()static JoinWindowsof(Duration timeDifference)Specifies that records of the same key are joinable if their timestamps are withintimeDifference, i.e., the timestamp of a record from the secondary stream is maxtimeDifferencebefore or after the timestamp of the record from the primary stream.longsize()Return the size of the specified windows in milliseconds.StringtoString()Map<Long,Window>windowsFor(long timestamp)Not supported byJoinWindows.
-
Field Details
-
beforeMs
public final long beforeMsMaximum time difference for tuples that are before the join tuple. -
afterMs
public final long afterMsMaximum time difference for tuples that are after the join tuple. -
enableSpuriousResultFix
protected final boolean enableSpuriousResultFix
-
-
Constructor Details
-
JoinWindows
-
-
Method Details
-
of
Specifies that records of the same key are joinable if their timestamps are withintimeDifference, i.e., the timestamp of a record from the secondary stream is maxtimeDifferencebefore or after the timestamp of the record from the primary stream.- Parameters:
timeDifference- join window interval- Returns:
- a new JoinWindows object with the window definition with and grace period (default to 24 hours minus
timeDifference) - Throws:
IllegalArgumentException- iftimeDifferenceis negative or can't be represented aslong milliseconds
-
before
Changes the start window boundary totimeDifferencebut keep the end window boundary as is. Thus, records of the same key are joinable if the timestamp of a record from the secondary stream is at mosttimeDifferenceearlier than the timestamp of the record from the primary stream.timeDifferencecan be negative but its absolute value must not be larger than current window "after" value (which would result in a negative window size).- Parameters:
timeDifference- relative window start time- Throws:
IllegalArgumentException- if the resulting window size is negative ortimeDifferencecan't be represented aslong milliseconds
-
after
Changes the end window boundary totimeDifferencebut keep the start window boundary as is. Thus, records of the same key are joinable if the timestamp of a record from the secondary stream is at mosttimeDifferencelater than the timestamp of the record from the primary stream.timeDifferencecan be negative but its absolute value must not be larger than current window "before" value (which would result in a negative window size).- Parameters:
timeDifference- relative window end time- Throws:
IllegalArgumentException- if the resulting window size is negative ortimeDifferencecan't be represented aslong milliseconds
-
windowsFor
Not supported byJoinWindows. ThrowsUnsupportedOperationException.- Specified by:
windowsForin classWindows<Window>- Parameters:
timestamp- the timestamp window should get created for- Returns:
- a map of
windowStartTimestamp -> Windowentries - Throws:
UnsupportedOperationException- at every invocation
-
size
public long size()Description copied from class:WindowsReturn the size of the specified windows in milliseconds. -
grace
Reject out-of-order events that are delayed more thanafterWindowEndafter the end of its window.Delay is defined as (stream_time - record_timestamp).
- Parameters:
afterWindowEnd- The grace period to admit out-of-order events to a window.- Returns:
- this updated builder
- Throws:
IllegalArgumentException- if theafterWindowEndis negative or can't be represented aslong milliseconds
-
gracePeriodMs
public long gracePeriodMs()Description copied from class:WindowsReturn the window grace period (the time to admit out-of-order events after the end of the window.) Delay is defined as (stream_time - record_timestamp).- Specified by:
gracePeriodMsin classWindows<Window>
-
equals
-
hashCode
public int hashCode() -
toString
-