直播1:
键:A,值:1
键:B,值:2
键:A,值:3
键:B,值:4
直播2:
键:A,值:X
键:B,值:Y
我得到的输出:
值1:1,值2:X
值1:2,值2:Y
值1:3,值2:空
值1:4,值2:空
预期输出:
值1:1,值2:X
值1:2,值2:Y
值1:3,值2:X
值1:4,值2:Y
JoinWindows joinWindows = JoinWindows.of(Duration.ofMinutes(5));
KStream<String, String> joined = stream1
.join(stream2,
(value1, value2) -> {
System.out.println("value1: " + value1);
System.out.println("value2: " + value2);
return value1; //Ignore this for now, my prints are not showing me the correct value
},
joinWindows
);
这是我的实现
在 Kafka Streams 中,在特定流操作(包括连接)中处理记录后,它将在流管道中向前移动,并且将不再可用于后续操作(在您的情况下是连接)以及稍后到达的记录。
kafka 流管道就像 java 流管道,它是一个记录流,如果没有任何东西阻止它(连接条件),它就会向前移动。
在您的示例中,在第一个联接操作之后,stream1 中的前两条记录已经与stream2 的前两条记录联接,并且它们已经传递到流管道操作中的下一步,因此当最新的两条记录到达时对于stream1,他们将在stream2中找不到任何要连接的内容,并且连接操作将向您显示来自stream2端的空值。