在同一个key跨越5秒窗口边界前后各发一批消息,验证窗口聚合的计数是真实独立的、不会跨窗口累加,理解为什么Join操作也必须依赖时间窗口来限定关联范围。
命令 · python p.produce("streams-input", value="hello kafka hello") # t=0秒 time.sleep(6) # 真实等超过5秒的窗口大小 p.produce("streams-input", value="hello streams hello") # t=6秒,真实进入下一个窗口
kafka@[1790563690000-1790563695000) -> 1 hello@[1790563690000-1790563695000) -> 2 streams@[1790563695000-1790563700000) -> 1 hello@[1790563695000-1790563700000) -> 2
真实关键的观察:第二批消息里的"hello",计数真实是2,不是4——它没有跟第一批的hello累加,而是真实在一个全新的窗口[1790563695000-1790563700000)里重新从0开始计数。两个窗口的起始时间戳真实精确相差5000毫秒(1790563695000-1790563690000),跟代码里配置的TimeWindows.ofSizeAndGrace(Duration.ofSeconds(5), ...)完全对上。
每一步都是本文上面真实运行Streams程序跑出来的原始结果。