Flink 不输出任何内容


List<Integer> lss = new ArrayList<>();
lss.add(2);
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);
env.fromCollection(lss)
.keyBy(x-> "1")
.timeWindow(Time.seconds(4), Time.seconds(1))
.reduce((x,y)->3)
.map(x->"vcvv")
.print();
env.execute("xxx");

我正在写一个flink演示来开始使用flink,我有几件事不明白:
1、如果我从TimeCharacteristic.IngestionTime更改为TimeCharacteristic.ProcessingTime,那么flink什么都不输出
2、窗口长度为4秒,幻灯片长度为1秒,我希望输出之间有1秒的间隔。但是,我看到同时打印了4个输出。

  1. Flink在使用处理时间语义时不输出任何内容,因为作业在窗口关闭之前已经完成运行。如果您提供了足够的数据,使作业能够运行至少4秒,您将看到一些输出。

  2. 使用摄取时间语义,您可以同时看到结果,因为在作业结束时,所有窗口都同时关闭。当输入流已被完全摄取,并且作业正在关闭时,就会发生这种情况——此时会在整个集群中发送一个信号,关闭所有剩余的事件时间(和摄取时间(窗口。

这很可能是因为您使用的是IngestionTime特性,其内部与EventTime相似,不同之处在于时间戳和水印由Flink自动生成。这基本上意味着,无论何时处理所有元素,Flink都将生成水印Long.MAX_VALUE,它将刷新所有结果并关闭窗口。

ProcessingTime不会发生这种情况,所以你需要自己处理。我建议参考文件。

至于第二个问题,这不是windows的工作方式。根据所选的TimeCharacteristic,窗口仅根据Flink接收元素的时间或其时间戳(EventTime(来收集元素。窗口中的幻灯片只显示了它们重叠的程度,请再次参考文档

相关内容

  • 没有找到相关文章

最新更新