bbejeck commented on code in PR #18865:
URL: https://github.com/apache/kafka/pull/18865#discussion_r1953378378


##########
streams/src/main/java/org/apache/kafka/streams/kstream/KStream.java:
##########
@@ -909,28 +908,42 @@ <VRight, VOut> KStream<K, VOut> leftJoin(final KStream<K, 
VRight> rightStream,
                                              final StreamJoined<K, V, VRight> 
streamJoined);
 
     /**
-     * Join records of this stream with another {@code KStream}'s records 
using windowed outer equi join with default
-     * serializers and deserializers.
-     * In contrast to {@link #join(KStream, ValueJoiner, JoinWindows) 
inner-join} or
-     * {@link #leftJoin(KStream, ValueJoiner, JoinWindows) left-join}, all 
records from both streams will produce at
-     * least one output record (cf. below).
-     * The join is computed on the records' key with join attribute {@code 
thisKStream.key == otherKStream.key}.
+     * Join records of this (left) stream with another (right) {@code 
KStream}'s records using a windowed outer equi-join.
+     * In contrast to an {@link #join(KStream, ValueJoiner, JoinWindows) inner 
join} or
+     * {@link #leftJoin(KStream, ValueJoiner, JoinWindows) left join}, all 
records from both stream will produce at
+     * least one output record (more details below).
+     * The join is computed using the records' key as join attribute, i.e., 
{@code leftRecord.key == rightRight.key}.
      * Furthermore, two records are only joined if their timestamps are close 
to each other as defined by the given
      * {@link JoinWindows}, i.e., the window defines an additional join 
predicate on the record timestamps.
-     * <p>
-     * For each pair of records meeting both join predicates the provided 
{@link ValueJoiner} will be called to compute
-     * a value (with arbitrary type) for the result record.
-     * The key of the result record is the same as for both joining input 
records.
-     * Furthermore, for each input record of both {@code KStream}s that does 
not satisfy the join predicate the provided
-     * {@link ValueJoiner} will be called with a {@code null} value for 
this/other stream, respectively.
-     * If an input record value is {@code null} the record will not be 
included in the join operation and thus no
-     * output record will be added to the resulting {@code KStream}.
-     * <p>
-     * Example (assuming all input records belong to the correct windows):
+     *
+     * <p>For each pair of records meeting both join predicates the provided 
{@link ValueJoiner} will be called to
+     * compute a value (with arbitrary type) for the result record.
+     * Furthermore, for each input record of either {@code KStream} that does 
not have any join-partner in the other
+     * stream (i.e., no record with the same key within the join interval), 
{@link ValueJoiner} will be called with a
+     * {@code null} value for right/left stream, respectively.
+     *
+     * <p>Note: By default, non-joining records from either stream are 
buffered until their join window closes, and
+     * corresponding outer-join results for these records are emitted with 
some delay.
+     * If you want to get outer-join results without any delay, you can use 
{@link JoinWindows#of(Duration)
+     * JoinWindows#of(Duration) [deprecated]} instead.

Review Comment:
   no concerns - feel free to merge



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to