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

时间:2016-05-08 09:49:10

标签: 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:1462363368000, user_id:2, country:US, mark:200}
{timestamp:1462363367000, user_id:2, country:US, mark:300}
  1. 我使用assignTimestampsAndWatermarks来使用事件时间戳
  2. 我使用user_id字段
  3. 键入数据

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

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

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

    我发现的唯一一件事是回答类似的要求(但不完全是我需要的那个)是使用事件时间会话窗口(在撰写这个问题时不稳定,Flink 1.1 - {{3} })

    知道如何实现它吗?

    由于

0 个答案:

没有答案