我在kafka流中有以下逻辑流程:
stream.map((nullKey, rawData) -> KeyValue.pair(somekey(rawData), rawData))
.filter((k, v) -> somefilterning(v))
.groupByKey()
.count(TimeWindows.of(3600).until(TimeUnit.SECONDS.toMillis(7200)), "someStateStore")
.foreach((k, v) -> print(k.window().start()));
传递给count方法的参数与上面显示的相同,因此,它应该在(逻辑)每小时窗口中聚合键,即在11:00到12:00之间到达的所有键应该聚合在一起。 / p>
要验证这一点,我在foreach调用中打印窗口开始时间(或者至少这是我期望的那样)。我的COMMIT_INTERVAL_MS_CONFIG
设置为2分钟,因此计数输出应每2分钟刷新一次,我希望key.window.start()在刷新之间保持不变(假设当然刷新相同的逻辑小时数)。
相反,我看到许多不同的start()值:
timestamp time
0 1508068706 11:58:26
1 1508068713 11:58:33
2 1508068720 11:58:40
3 1508068728 11:58:48
4 1508068735 11:58:55
5 1508068742 11:59:02
这与逻辑小时(11:00)非常不同。它也与2分钟提交间隔无关,因为您可以看到时间戳与8秒的差异。
答案 0 :(得分:1)
这个答案有多个部分:
3600
,此值以毫秒为单位,而不是秒;我想你想做TimeWindows.of(TimeUnit.SECONDS.toMillis(3600))