Kafka KStreams左连接未得到预期输出问题求助
Kafka KStreams左连接未达预期输出的解决办法
问题核心原因
你当前使用的是KStream与KStream的窗口左连接,这种连接逻辑仅会匹配同一时间窗口内两个流的对应键事件。当stream2中的(A,X)、(B,Y)事件超出你设置的5分钟窗口后,stream1后续的(A,3)、(B,4)事件无法在窗口内找到匹配的stream2事件,因此返回null。
而你需要的是让stream1的每个事件都能匹配到stream2对应键的最新状态值,这需要用KStream与KTable的左连接来实现——KTable会持久化维护每个键的最新值,不受时间窗口限制。
修正后的代码实现
// 将stream2转换为KTable,维护每个键的最新值 KTable<String, String> stream2Table = stream2.toTable(); // 使用KStream-KTable左连接,无需设置JoinWindows KStream<String, String> joined = stream1 .join(stream2Table, (value1, value2) -> { System.out.println("value1: " + value1); System.out.println("value2: " + value2); return value1; } );
效果说明
转换为KStream-KTable连接后:
- stream1的
(A,1)匹配stream2Table的X - stream1的
(B,2)匹配stream2Table的Y - stream1的
(A,3)匹配stream2Table中A键的最新值X - stream1的
(B,4)匹配stream2Table中B键的最新值Y
完全符合你的预期输出。
内容的提问来源于stack exchange,提问作者Shubham Suryavanshi
相关产品推荐
相关产品推荐

