Kafka流中计数操作后的意外密钥。

时间:2017-10-15 15:18:14

标签: apache-kafka-streams

我在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秒的差异。

1 个答案:

答案 0 :(得分:1)

这个答案有多个部分: