Apache flink Flink Streaming-如何基于第一个(按事件时间戳)键控事件创建窗口

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

我正在使用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}
  • 我使用AssignTimestamp和水印来使用事件时间戳
  • 我使用user_id字段键入数据
  • 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");