Apache flink Flink Streaming-如何基于第一个(按事件时间戳)键控事件创建窗口
我正在使用Flink的DataStream API来处理带有翻滚窗口的键控流 简化问题如下: 输入事件对象示例:Apache flink Flink Streaming-如何基于第一个(按事件时间戳)键控事件创建窗口,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在使用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:14623633
{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}
KeyedStream KeyedStream=eventsStream
.assignTimestampsAndWatermarks(新MessageTimestampExtractor())
.keyBy(“用户id”);
现在我有了键控数据,我希望根据最早的事件的时间戳设置10分钟的窗口,然后在该窗口上执行某种聚合
如何创建静态大小(10分钟)的窗口,该窗口将根据该窗口上该用户的第一个id开始,这意味着当窗口结束并再次看到用户id时,将创建一个新窗口
我发现唯一能满足类似要求(但不完全是我需要的)的是使用事件时间会话窗口(在写这个问题时不稳定,Flink 1.1-)
你知道如何实现吗
谢谢事件时间会话窗口缺少什么?如果窗口的第一个事件与“当前时间”之间存在预先配置的增量,则使用事件时间会话窗口不会触发该窗口,而是通过最后一个事件增量触发@rmetzgerI认为您必须基于会话窗口1实现自己的触发器。@OrGuz您找到解决方案了吗?
KeyedStream<Event, Tuple> keyedStream = eventsStream
.assignTimestampsAndWatermarks(new MessageTimestampExtractor())
.keyBy("user_id");