我正在使用Flink的DataStream API来处理带有翻滚窗口的键控流 .

简化问题如下:

输入事件对象示例:

{timestamp:1462363362000, user_id:1, country:US, mark:50}
{timestamp:1462363361000, user_id:1, country:US, mark:40}
{timestamp:1462363368000, user_id:1, country:US, mark:30}
{timestamp:1462363368000, user_id:2, country:US, mark:200}
{timestamp:1462363367000, user_id:2, country:US, mark:300}
  • 我使用assignTimestampsAndWatermarks来使用事件时间戳

  • 我使用user_id字段键入数据

.

KeyedStream<Event, Tuple> keyedStream = eventsStream
.assignTimestampsAndWatermarks(new MessageTimestampExtractor())
.keyBy("user_id");

现在我有了键控数据,我希望根据事件的时间戳最早的事件有10分钟的窗口,然后在该窗口上执行某种聚合 .

如何创建静态大小(10分钟)的窗口,该窗口将根据该窗口上的user_id的第一个开始,这意味着当窗口结束并再次看到user_id时,将创建一个新窗口 .

我发现的唯一一件事是回答类似的要求(但不完全是我需要的那个)是使用事件时间会话窗口(在写这个问题时不稳定,Flink 1.1 - https://ci.apache.org/projects/flink/flink-docs-master/apis/streaming/windows.html

知道如何实现它吗?

谢谢