Flink流中使用状态和窗口(时间)之间的差异



假设我们想要计算项目的总和和平均值,并且可以使用CCD_ 1或CCD_。

使用windows的示例-https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/streaming_guide.html#example-程序

使用states的示例-https://github.com/dataArtisans/flink-training-exercises/blob/master/src/main/java/com/dataartisans/flinktraining/exercises/datastream_java/ride_speed/RideSpeed.java

我能问一下做出这个决定的原因是什么吗?我能推断出,如果数据非常不规则地到达(50%在定义的窗口长度内,另50%没有),那么窗口方法的结果会更偏向(因为50%的事件被丢弃)吗?

另一方面,在处理状态时,我们是否会花费更多的时间检查和更新状态?

首先,它取决于您的语义。。。这两个例子使用不同的语义,因此不能直接进行比较。此外,窗口也在内部处理状态。很难说总的来说用这种方法是更好的。

由于Flink的窗口语义非常丰富,我建议使用窗口。如果您不能用windows来表达您的语义,那么使用state可以是一个很好的选择。使用windows还有一个额外的优点,即状态处理(很难正确完成)是自动为您完成的。

该决定绝对独立于您的数据到达率。Flink不会丢弃任何数据。如果使用事件时间(而不是处理时间

最新更新