Kafka KStreams 左连接没有给我预期的输出

问题描述 投票:0回答:1

直播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
);

这是我的实现

apache-kafka apache-kafka-streams
1个回答
0
投票

在 Kafka Streams 中,在特定流操作(包括连接)中处理记录后,它将在流管道中向前移动,并且将不再可用于后续操作(在您的情况下是连接)以及稍后到达的记录。

kafka 流管道就像 java 流管道,它是一个记录流,如果没有任何东西阻止它(连接条件),它就会向前移动。

在您的示例中,在第一个联接操作之后,stream1 中的前两条记录已经与stream2 的前两条记录联接,并且它们已经传递到流管道操作中的下一步,因此当最新的两条记录到达时对于stream1,他们将在stream2中找不到任何要连接的内容,并且连接操作将向您显示来自stream2端的空值。

© www.soinside.com 2019 - 2024. All rights reserved.