如何定义应该在一天的特定时间提前的时间窗口?

时间:2020-07-04 08:42:04

标签: apache-kafka apache-kafka-streams

例如,我正在尝试使用Kafka流对特定时间范围(24小时)内的唯一身份访问者进行统计,

2020-07-03 22:00:00〜2020-07-04 21:59:59(24小时),时间窗口应在2020-07-04 22:00:00自动前进。

根据文档,滚动时间窗口似乎是一个不错的选择:

Duration windowSizeDuration = Duration.ofDays(1);
TimeWindows timeWindows = TimeWindows.of(windowSizeDuration);

但是我找不到任何可用的流api来限制时间范围,有人可以给我一些建议吗?谢谢

1 个答案:

答案 0 :(得分:2)

滚动窗口与纪元对齐,这意味着UTC时区中的Unix时间戳,即24小时窗口从UTC午夜开始,直到UTC午夜结束,如文档中所述:https://kafka.apache.org/25/documentation/streams/developer-guide/dsl-api.html#tumbling-time-windows

您可以通过使用自定义时间戳提取器或使用transform()(例如context.forward(..., To.all().withTimestamp(..)))来“移动”事件的时间戳。

或者您自己定义一个自定义TimeWindow。您可以在Github上找到一个示例:https://github.com/confluentinc/kafka-streams-examples/blob/5.5.0-post/src/test/java/io/confluent/examples/streams/window/DailyTimeWindows.java