Apache flink 弗林克';时间窗口';操作未生成PopularPlacesFromKafka示例文件的输出

Apache flink 弗林克';时间窗口';操作未生成PopularPlacesFromKafka示例文件的输出,apache-flink,Apache Flink,我正在阅读来自dataArtisans的Flink教程材料,并且在谈到示例文件时出于某种原因 我没有收到任何发送到stdout的输出 ... // find popular places val popularSpots = rides // match ride to grid cell and event type (start or end) .map(new GridCellMatcher) // partition by cell id and event type .

我正在阅读来自dataArtisans的Flink教程材料,并且在谈到示例文件时出于某种原因 我没有收到任何发送到stdout的输出

...
// find popular places
val popularSpots = rides
  // match ride to grid cell and event type (start or end)
  .map(new GridCellMatcher)
  // partition by cell id and event type
  .keyBy( k => k )
  // build sliding window
  .timeWindow(Time.minutes(15), Time.minutes(5))
  // count events in window
  .apply{ (key: (Int, Boolean), window, vals, out: Collector[(Int, Long, Boolean, Int)]) =>
    out.collect( (key._1, window.getEnd, key._2, vals.size) )
  }

// print result on stdout
    popularSpots.print()
...

我已经确认数据是从卡夫卡中提取出来的,当它试图执行“时间窗口”操作时,我似乎没有得到任何输出。如果我删除'timeWindow'操作,我可以看到输出的'keyBy'数据。是否有明显的遗漏?

是否为源配置了适当的加速?默认情况下(没有加速因子),源模拟原始数据,即,它以与原始生成记录相同的速率发出记录。这意味着产生1分钟的数据需要1分钟

窗口操作符每5分钟聚合一次最后15分钟的数据。因此,窗口操作符生成第一个结果需要5分钟


如果您将加速因子设置为600,您将在1秒内获得10分钟的数据。

一般来说,Flink作业可能不会产生任何输出有几个原因,但一个非常常见的原因与水印有关。Flink的事件时间时钟仅在当前水印前进时前进,因此如果没有水印,事件时间窗口将永远不会启动


在Flink训练练习中,出租车行驶来源为您生成水印。但是现在您正在使用Kafka源代码,您必须实现一个时间戳提取器和水印生成器,然后在流上调用
assignTimestampsAndWatermarks
(请参阅)。一个
BoundedAutofordernessTimestampExtractor
,其中延迟与写入Kafka的作业配置的延迟匹配,将很好地工作。

如果任何人有相同的问题,这就是我的问题

我的kafka主题有多个分区,但将所有测试数据生成到一个分区(0),一旦我有>1个kafka使用者,除分配给分区0的使用者外,所有使用者都不会接收任何数据,因此不会沿操作符链发送任何水印-这会导致窗口函数停止发送数据(这也是为什么它在这些情况下与ProcessingTime配合得很好的原因)。下面是一个相关的JIRA:


感谢您的反馈,但我引用的代码中包含了您提到的内容,但仍然没有输出。与@AJC相同的问题是,当我重新生成日志并将其推送到多个分区时,效果很好。我和您有相同的问题,我整个下午都很困惑!一个主题有10个分区,但我没有ush只记录到一个进行简单测试,它没有任何输出。但当我再次将日志推送到多个分区时,它工作正常!感谢您解决了这个问题