我正在使用 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 )
知道如何实现吗?
谢谢