Apache Beam - 用于kinesis流的滑动窗口

时间:2018-06-17 13:20:38

标签: apache window apache-beam sliding

我正在尝试使用kinesis流处理事件执行1小时(3600秒TimeWindowSize)和5秒(TimeWindowSamplingFrequency)的滑动窗口, 但是我每5秒收到一次处理过的事件,它没有按照1小时的滑动窗口给我一小时的事件转换结果。

根据我的理解,它应该等待并处理来自kinesis流的1小时事件,然后在1小时后给我输出。

以下是我使用的示例代码

 pipeline.apply(
  KinesisIO.read()
    .withStreamName(options.getEnrichedSnowplowEventsStreamName())
    .withAWSClientsProvider(new DefaultAWSClientsProvider())
    .withInitialPositionInStream(InitialPositionInStream.LATEST))
  .apply(MapElements.into(TypeDescriptors.strings())
    .via(record -> new String(record.getDataAsBytes())))
  .apply(ParseSnowplowEvents.fromStrings())

  .apply(a userdefined ParDo transform which gives an op of 
  PCollection<Class> objects )

  .apply(Window
    .into(SlidingWindows
      .of(
        Duration.standardSeconds(
          3600))
      .every(Duration.standardSeconds(
        5))
    )).apply(
  a userdefined transform with ParDo which gives me the o/p of PCollection<KV<Integer, Double>>>)
 .apply(PrintValue.andPassOn());

PrintValue.andPassOn()userdefined transform为我打印数据,但我期待结果PCollection&gt;在一小时滑动窗口结束时,它会在每5秒打印一次KV对

  

2018-06-17T13:11:29.999Z - KV {101,5.0}
  2018-06-17T13:11:34.999Z - KV {102,0.4}
  2018-06-17T13:11:39.999Z    - KV {104,0.5}

任何帮助都会非常棒!!!

1 个答案:

答案 0 :(得分:0)

根据您的采样频率进行打印。将其更改为一小时,它应该可以正常工作。