...
Pay attention, that both streams are use as examples for KStream (ie, record stream) and KTable (ie, changelog stream) with different semantics. For KTable, so-called tombstone records with format key:null
are of special interest, as they delete a key (those records are shown as null in all examples to highlight tombstone semantics). Last but not least, in Kafka Streams each join is "customized" by the user with a ValueJoiner
function that compute the actual result. Hence, we show output records as "X - Y" with X and Y being the left and right value, respectively, given to the value joiner. If the output is shown as null (ie, tombstone message), ValueJoiner
will not be called because a result record will be deleted.
...
Improved Left/Outer Stream-Stream Join (v3.0.x and newer)
Anchor | ||||
---|---|---|---|---|
|
Warning |
---|
Prior to version |
...
ts | STREAM_1 (left) | STREAM_2 (right) | leftJoin | outerJoin |
1 | null | |||
2 | null | |||
3 | A | |||
4 | a | A - a | A - a | |
5 | B | B - a | B - a | |
6 | b | A - b B - b | A - b B - b | |
7 | null | |||
8 | null | |||
9 | C | C - a C - b | C - a C - b | |
10 | c | A - c B - c C - c | A - c B - c C - c | |
11 | null | |||
12 | null | |||
13 | null | |||
14 | d | B - d C - d | B - d C - d | |
15 | D | D - b D - c D - d | D - b D - c D - d | |
... | ||||
30 | E | |||
... | ||||
45 | F | E - null | E - null | |
... | ||||
60 | f | F - null | F - null | |
... | ||||
75 | G | null - f |
...
New Join Semantics (v0.10.2.x
and newer)
Anchor | ||||
---|---|---|---|---|
|
Warning |
---|
This section describes the new join semantics as of version |
...
ts | LHS-Stream (K, extracted-FK) | RHS-Stream State (FK,V) | Inner-Join Output | Left-Join Output | |
---|---|---|---|---|---|
1 | Publish event to LHS | (k,1) | (1,foo) | (k,1,foo) | (k,1,foo) |
2 | Change LHS fk | (k,2) | (1,foo) | (k,null) | (k,2,null) |
3 | Change LHS fk | (k,3) | (1,foo) | (k,null) | (k,3,null) |
4 | Publish RHS entity | - | (1,foo) | (k,3,bar) | (k,3,bar) |
5 | Delete k | (k,null) | (1,foo) | (k,null) | (k,null,null) |
6 | Publish original event again | (k,1) | (1,foo) | (k,1,foo) | (k,1,foo) |
7 | Publish event to LHS | (q,10) | (1,foo) | - | (q,null,10) |
8 | Publish RHS entity | - | (1,foo) | (q,10,baz) | (q,10,baz) |
...
...
Old Join Semantics (v0.10.1.x
and older)
Anchor | ||||
---|---|---|---|---|
|
Kafka Streams 0.10.1.x (and older) offers the follow join operators:
...