0

假设我们要计算项目的总和和平均值,并且可以使用stateswindows(时间)。

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

使用示例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% 的事件被丢弃)?

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

4

1 回答 1

1

首先,这取决于您的语义......这两个示例使用不同的语义,因此不能直接比较。此外,windows 也可以在内部使用状态。一般来说,很难说方法是更好的方法。

由于 Flink 的窗口语义非常丰富,我建议使用 windows。如果你不能用 windows 表达你的语义,使用 state 可能是一个不错的选择。使用 Windows 的另一个优点是状态处理(很难正确完成)会自动为您完成。

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

于 2016-01-04T18:08:56.017 回答