在 Flink 流中使用状态和 windows(time) 之间的区别
Differences between working with states and windows(time) in Flink streaming
假设我们要计算项目的总和和平均值,
并且可以使用 states
或 windows
(time)。
使用 windows
的示例 -
https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/streaming_guide.html#example-program
请问做出决定的原因是什么?我可以推断如果数据到达非常不规则(50% 到达定义的 window 长度而其他 50% 没有),window 方法的结果更偏向(因为 50 % 事件被丢弃)?
另一方面,我们在处理状态时是否会花更多时间检查和更新状态?
首先,这取决于您的语义...这两个示例使用不同的语义,因此不能直接进行比较。此外,windows 也在内部处理状态。很难说with approach哪个好。
由于Flink的window语义非常丰富,建议使用windows。如果你不能用 windows 表达你的语义,使用状态可能是一个很好的选择。使用 windows 具有额外的优势,即状态处理——很难正确完成——会自动为您完成。
决定完全独立于您的数据到达率。 Flink 不会丢弃任何数据。如果你使用事件时间(而不是处理时间),你的结果将是相同的,与数据到达率无关。
假设我们要计算项目的总和和平均值,
并且可以使用 states
或 windows
(time)。
使用 windows
的示例 -
https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/streaming_guide.html#example-program
请问做出决定的原因是什么?我可以推断如果数据到达非常不规则(50% 到达定义的 window 长度而其他 50% 没有),window 方法的结果更偏向(因为 50 % 事件被丢弃)?
另一方面,我们在处理状态时是否会花更多时间检查和更新状态?
首先,这取决于您的语义...这两个示例使用不同的语义,因此不能直接进行比较。此外,windows 也在内部处理状态。很难说with approach哪个好。
由于Flink的window语义非常丰富,建议使用windows。如果你不能用 windows 表达你的语义,使用状态可能是一个很好的选择。使用 windows 具有额外的优势,即状态处理——很难正确完成——会自动为您完成。
决定完全独立于您的数据到达率。 Flink 不会丢弃任何数据。如果你使用事件时间(而不是处理时间),你的结果将是相同的,与数据到达率无关。