blob: aa16baaf96a78d6199a105774fce4eadb15742a4 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>JoinWindows (kafka 3.0.1 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.kafka.streams.kstream, class: JoinWindows">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":9,"i7":10,"i8":10,"i9":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "alt-color";
var rowColor = "row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar.top">
<div class="skip-nav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar.top.firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip.navbar.top">
<!-- -->
</span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.kafka.streams.kstream</a></div>
<h1 title="Class JoinWindows" class="title">Class JoinWindows</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="Windows.html" title="class in org.apache.kafka.streams.kstream">org.apache.kafka.streams.kstream.Windows</a>&lt;<a href="Window.html" title="class in org.apache.kafka.streams.kstream">Window</a>&gt;
<div class="inheritance">org.apache.kafka.streams.kstream.JoinWindows</div>
</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="type-name-label">JoinWindows</span>
extends <a href="Windows.html" title="class in org.apache.kafka.streams.kstream">Windows</a>&lt;<a href="Window.html" title="class in org.apache.kafka.streams.kstream">Window</a>&gt;</pre>
<div class="block">The window specifications used for joins.
<p>
A <code>JoinWindows</code> instance defines a maximum time difference for a <a href="KStream.html#join(org.apache.kafka.streams.kstream.KStream,org.apache.kafka.streams.kstream.ValueJoiner,org.apache.kafka.streams.kstream.JoinWindows)"><code>join over two streams</code></a> on the same key.
In SQL-style you would express this join as
<pre><code>
SELECT * FROM stream1, stream2
WHERE
stream1.key = stream2.key
AND
stream1.ts - before &lt;= stream2.ts AND stream2.ts &lt;= stream1.ts + after
</code></pre>
There are three different window configuration supported:
<ul>
<li>before = after = time-difference</li>
<li>before = 0 and after = time-difference</li>
<li>before = time-difference and after = 0</li>
</ul>
A join is symmetric in the sense, that a join specification on the first stream returns the same result record as
a join specification on the second stream with flipped before and after values.
<p>
Both values (before and after) must not result in an "inverse" window, i.e., upper-interval bound cannot be smaller
than lower-interval bound.
<p>
<code>JoinWindows</code> 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.
<p>
For time semantics, see <a href="../processor/TimestampExtractor.html" title="interface in org.apache.kafka.streams.processor"><code>TimestampExtractor</code></a>.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd><a href="TimeWindows.html" title="class in org.apache.kafka.streams.kstream"><code>TimeWindows</code></a>,
<a href="UnlimitedWindows.html" title="class in org.apache.kafka.streams.kstream"><code>UnlimitedWindows</code></a>,
<a href="SessionWindows.html" title="class in org.apache.kafka.streams.kstream"><code>SessionWindows</code></a>,
<a href="KStream.html#join(org.apache.kafka.streams.kstream.KStream,org.apache.kafka.streams.kstream.ValueJoiner,org.apache.kafka.streams.kstream.JoinWindows)"><code>KStream.join(KStream, ValueJoiner, JoinWindows)</code></a>,
<a href="KStream.html#join(org.apache.kafka.streams.kstream.KStream,org.apache.kafka.streams.kstream.ValueJoiner,org.apache.kafka.streams.kstream.JoinWindows,org.apache.kafka.streams.kstream.StreamJoined)"><code>KStream.join(KStream, ValueJoiner, JoinWindows, StreamJoined)</code></a>,
<a href="KStream.html#leftJoin(org.apache.kafka.streams.kstream.KStream,org.apache.kafka.streams.kstream.ValueJoiner,org.apache.kafka.streams.kstream.JoinWindows)"><code>KStream.leftJoin(KStream, ValueJoiner, JoinWindows)</code></a>,
<a href="KStream.html#leftJoin(org.apache.kafka.streams.kstream.KStream,org.apache.kafka.streams.kstream.ValueJoiner,org.apache.kafka.streams.kstream.JoinWindows,org.apache.kafka.streams.kstream.StreamJoined)"><code>KStream.leftJoin(KStream, ValueJoiner, JoinWindows, StreamJoined)</code></a>,
<a href="KStream.html#outerJoin(org.apache.kafka.streams.kstream.KStream,org.apache.kafka.streams.kstream.ValueJoiner,org.apache.kafka.streams.kstream.JoinWindows)"><code>KStream.outerJoin(KStream, ValueJoiner, JoinWindows)</code></a>,
<a href="KStream.html#outerJoin(org.apache.kafka.streams.kstream.KStream,org.apache.kafka.streams.kstream.ValueJoiner,org.apache.kafka.streams.kstream.JoinWindows,org.apache.kafka.streams.kstream.StreamJoined)"><code>KStream.outerJoin(KStream, ValueJoiner, JoinWindows, StreamJoined)</code></a>,
<a href="../processor/TimestampExtractor.html" title="interface in org.apache.kafka.streams.processor"><code>TimestampExtractor</code></a></dd>
</dl>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field.summary">
<h2>Field Summary</h2>
<div class="member-summary">
<table class="summary-table">
<caption><span>Fields</span></caption>
<thead>
<tr>
<th class="col-first" scope="col">Modifier and Type</th>
<th class="col-second" scope="col">Field</th>
<th class="col-last" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="alt-color">
<td class="col-first"><code>long</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#afterMs">afterMs</a></span></code></th>
<td class="col-last">
<div class="block">Maximum time difference for tuples that are after the join tuple.</div>
</td>
</tr>
<tr class="row-color">
<td class="col-first"><code>long</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#beforeMs">beforeMs</a></span></code></th>
<td class="col-last">
<div class="block">Maximum time difference for tuples that are before the join tuple.</div>
</td>
</tr>
<tr class="alt-color">
<td class="col-first"><code>protected boolean</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#enableSpuriousResultFix">enableSpuriousResultFix</a></span></code></th>
<td class="col-last">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<div class="inherited-list">
<h3 id="fields.inherited.from.class.org.apache.kafka.streams.kstream.Windows">Fields inherited from class&nbsp;org.apache.kafka.streams.kstream.<a href="Windows.html" title="class in org.apache.kafka.streams.kstream">Windows</a></h3>
<code><a href="Windows.html#DEPRECATED_DEFAULT_24_HR_GRACE_PERIOD">DEPRECATED_DEFAULT_24_HR_GRACE_PERIOD</a>, <a href="Windows.html#NO_GRACE_PERIOD">NO_GRACE_PERIOD</a></code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor.summary">
<h2>Constructor Summary</h2>
<div class="member-summary">
<table class="summary-table">
<caption><span>Constructors</span></caption>
<thead>
<tr>
<th class="col-first" scope="col">Modifier</th>
<th class="col-second" scope="col">Constructor</th>
<th class="col-last" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="alt-color">
<td class="col-first"><code>protected </code></td>
<th class="col-constructor-name" scope="row"><code><span class="member-name-link"><a href="#%3Cinit%3E(org.apache.kafka.streams.kstream.JoinWindows)">JoinWindows</a></span>&#8203;(<a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a>&nbsp;joinWindows)</code></th>
<td class="col-last">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method.summary">
<h2>Method Summary</h2>
<div class="member-summary" id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="active-table-tab">All Methods</button><button role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="table-tab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="table-tab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="table-tab" onclick="show(8);">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<table class="summary-table" aria-labelledby="t0">
<thead>
<tr>
<th class="col-first" scope="col">Modifier and Type</th>
<th class="col-second" scope="col">Method</th>
<th class="col-last" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="alt-color" id="i0">
<td class="col-first"><code><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#after(java.time.Duration)">after</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;timeDifference)</code></th>
<td class="col-last">
<div class="block">Changes the end window boundary to <code>timeDifference</code> but keep the start window boundary as is.</div>
</td>
</tr>
<tr class="row-color" id="i1">
<td class="col-first"><code><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#before(java.time.Duration)">before</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;timeDifference)</code></th>
<td class="col-last">
<div class="block">Changes the start window boundary to <code>timeDifference</code> but keep the end window boundary as is.</div>
</td>
</tr>
<tr class="alt-color" id="i2">
<td class="col-first"><code>boolean</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#equals(java.lang.Object)">equals</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></th>
<td class="col-last">&nbsp;</td>
</tr>
<tr class="row-color" id="i3">
<td class="col-first"><code><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#grace(java.time.Duration)">grace</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;afterWindowEnd)</code></th>
<td class="col-last">
<div class="block">Reject out-of-order events that are delayed more than <code>afterWindowEnd</code>
after the end of its window.</div>
</td>
</tr>
<tr class="alt-color" id="i4">
<td class="col-first"><code>long</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#gracePeriodMs()">gracePeriodMs</a></span>()</code></th>
<td class="col-last">
<div class="block">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).</div>
</td>
</tr>
<tr class="row-color" id="i5">
<td class="col-first"><code>int</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#hashCode()">hashCode</a></span>()</code></th>
<td class="col-last">&nbsp;</td>
</tr>
<tr class="alt-color" id="i6">
<td class="col-first"><code>static <a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#of(java.time.Duration)">of</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;timeDifference)</code></th>
<td class="col-last">
<div class="block">Specifies that records of the same key are joinable if their timestamps are within <code>timeDifference</code>,
i.e., the timestamp of a record from the secondary stream is max <code>timeDifference</code> before or after
the timestamp of the record from the primary stream.</div>
</td>
</tr>
<tr class="row-color" id="i7">
<td class="col-first"><code>long</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#size()">size</a></span>()</code></th>
<td class="col-last">
<div class="block">Return the size of the specified windows in milliseconds.</div>
</td>
</tr>
<tr class="alt-color" id="i8">
<td class="col-first"><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#toString()">toString</a></span>()</code></th>
<td class="col-last">&nbsp;</td>
</tr>
<tr class="row-color" id="i9">
<td class="col-first"><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Long.html" title="class or interface in java.lang" class="external-link">Long</a>,&#8203;<a href="Window.html" title="class in org.apache.kafka.streams.kstream">Window</a>&gt;</code></td>
<th class="col-second" scope="row"><code><span class="member-name-link"><a href="#windowsFor(long)">windowsFor</a></span>&#8203;(long&nbsp;timestamp)</code></th>
<td class="col-last">
<div class="block">Not supported by <code>JoinWindows</code>.</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inherited-list">
<h3 id="methods.inherited.from.class.java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field.detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="beforeMs">
<h3>beforeMs</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="member-name">beforeMs</span></div>
<div class="block">Maximum time difference for tuples that are before the join tuple.</div>
</section>
</li>
<li>
<section class="detail" id="afterMs">
<h3>afterMs</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="member-name">afterMs</span></div>
<div class="block">Maximum time difference for tuples that are after the join tuple.</div>
</section>
</li>
<li>
<section class="detail" id="enableSpuriousResultFix">
<h3>enableSpuriousResultFix</h3>
<div class="member-signature"><span class="modifiers">protected final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="member-name">enableSpuriousResultFix</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor.detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(org.apache.kafka.streams.kstream.JoinWindows)">
<h3>JoinWindows</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="member-name">JoinWindows</span>&#8203;(<span class="parameters"><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a>&nbsp;joinWindows)</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method.detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="of(java.time.Duration)">
<h3>of</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></span>&nbsp;<span class="member-name">of</span>&#8203;(<span class="parameters"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;timeDifference)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<div class="block">Specifies that records of the same key are joinable if their timestamps are within <code>timeDifference</code>,
i.e., the timestamp of a record from the secondary stream is max <code>timeDifference</code> before or after
the timestamp of the record from the primary stream.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>timeDifference</code> - join window interval</dd>
<dt>Returns:</dt>
<dd>a new JoinWindows object with the window definition with and grace period (default to 24 hours minus <code>timeDifference</code>)</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if <code>timeDifference</code> is negative or can't be represented as <code>long milliseconds</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="before(java.time.Duration)">
<h3>before</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></span>&nbsp;<span class="member-name">before</span>&#8203;(<span class="parameters"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;timeDifference)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<div class="block">Changes the start window boundary to <code>timeDifference</code> but 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 most
<code>timeDifference</code> earlier than the timestamp of the record from the primary stream.
<code>timeDifference</code> can be negative but its absolute value must not be larger than current window "after"
value (which would result in a negative window size).</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>timeDifference</code> - relative window start time</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if the resulting window size is negative or <code>timeDifference</code> can't be represented as <code>long milliseconds</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="after(java.time.Duration)">
<h3>after</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></span>&nbsp;<span class="member-name">after</span>&#8203;(<span class="parameters"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;timeDifference)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<div class="block">Changes the end window boundary to <code>timeDifference</code> but 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 most
<code>timeDifference</code> later than the timestamp of the record from the primary stream.
<code>timeDifference</code> can be negative but its absolute value must not be larger than current window "before"
value (which would result in a negative window size).</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>timeDifference</code> - relative window end time</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if the resulting window size is negative or <code>timeDifference</code> can't be represented as <code>long milliseconds</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="windowsFor(long)">
<h3>windowsFor</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Long.html" title="class or interface in java.lang" class="external-link">Long</a>,&#8203;<a href="Window.html" title="class in org.apache.kafka.streams.kstream">Window</a>&gt;</span>&nbsp;<span class="member-name">windowsFor</span>&#8203;(<span class="parameters">long&nbsp;timestamp)</span></div>
<div class="block">Not supported by <code>JoinWindows</code>.
Throws <a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/UnsupportedOperationException.html" title="class or interface in java.lang" class="external-link"><code>UnsupportedOperationException</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="Windows.html#windowsFor(long)">windowsFor</a></code>&nbsp;in class&nbsp;<code><a href="Windows.html" title="class in org.apache.kafka.streams.kstream">Windows</a>&lt;<a href="Window.html" title="class in org.apache.kafka.streams.kstream">Window</a>&gt;</code></dd>
<dt>Parameters:</dt>
<dd><code>timestamp</code> - the timestamp window should get created for</dd>
<dt>Returns:</dt>
<dd>a map of <code>windowStartTimestamp -&gt; Window</code> entries</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/UnsupportedOperationException.html" title="class or interface in java.lang" class="external-link">UnsupportedOperationException</a></code> - at every invocation</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="size()">
<h3>size</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="member-name">size</span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class:&nbsp;<code><a href="Windows.html#size()">Windows</a></code></span></div>
<div class="block">Return the size of the specified windows in milliseconds.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="Windows.html#size()">size</a></code>&nbsp;in class&nbsp;<code><a href="Windows.html" title="class in org.apache.kafka.streams.kstream">Windows</a>&lt;<a href="Window.html" title="class in org.apache.kafka.streams.kstream">Window</a>&gt;</code></dd>
<dt>Returns:</dt>
<dd>the size of the specified windows</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="grace(java.time.Duration)">
<h3>grace</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="JoinWindows.html" title="class in org.apache.kafka.streams.kstream">JoinWindows</a></span>&nbsp;<span class="member-name">grace</span>&#8203;(<span class="parameters"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/time/Duration.html" title="class or interface in java.time" class="external-link">Duration</a>&nbsp;afterWindowEnd)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<div class="block">Reject out-of-order events that are delayed more than <code>afterWindowEnd</code>
after the end of its window.
<p>
Delay is defined as (stream_time - record_timestamp).</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>afterWindowEnd</code> - The grace period to admit out-of-order events to a window.</dd>
<dt>Returns:</dt>
<dd>this updated builder</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if the <code>afterWindowEnd</code> is negative or can't be represented as <code>long milliseconds</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="gracePeriodMs()">
<h3>gracePeriodMs</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="member-name">gracePeriodMs</span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class:&nbsp;<code><a href="Windows.html#gracePeriodMs()">Windows</a></code></span></div>
<div class="block">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).</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="Windows.html#gracePeriodMs()">gracePeriodMs</a></code>&nbsp;in class&nbsp;<code><a href="Windows.html" title="class in org.apache.kafka.streams.kstream">Windows</a>&lt;<a href="Window.html" title="class in org.apache.kafka.streams.kstream">Window</a>&gt;</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="member-name">equals</span>&#8203;(<span class="parameters"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="member-name">hashCode</span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="member-name">toString</span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottom-nav" id="navbar.bottom">
<div class="skip-nav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar.bottom.firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<span class="skip-nav" id="skip.navbar.bottom">
<!-- -->
</span></nav>
</footer>
</div>
</div>
</body>
</html>