Flink streaming中使用状态和窗口(时间)的区别


0

假设我们要计算项目的总和和平均值,

使用windows的示例-

使用状态的示例-

我能问一下做决定的理由是什么吗?我是否可以推断,如果数据非常不规则地到达(50%在定义的窗口长度中,而另50%不在),窗口方法的结果会更有偏差(因为50%的事件被丢弃)?

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

1 答案


0

首先,这取决于你的语义。。。这两个例子使用不同的语义,因此无法直接比较。此外,windows也在内部处理state。很难说一般的方法是比较好的。

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

这个决定绝对独立于数据到达率。Flink不会删除任何数据。如果您使用事件时间(而不是处理时间),您的结果将是相同的,毕竟与数据到达率无关。


我来回答

写文章

提问题

面试题