例如,我正在尝试使用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来限制时间范围,有人可以给我一些建议吗?谢谢
答案 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