0

我想使用早期触发逻辑进行窗口聚合(您可以认为聚合是由窗口关闭或特定事件触发的),我在文档上阅读:https://ci.apache。 org/projects/flink/flink-docs-release-1.12/dev/stream/operators/windows.html#incremental-window-aggregation-with-aggregatefunction

该文档提到Note that using ProcessWindowFunction for simple aggregates such as count is quite inefficient. 了这一点,因此建议与增量窗口聚合配对。

我的问题是文档中的AverageAggregate,状态没有保存在任何地方,所以如果应用程序崩溃,averageAggregate 会丢失所有中间值,对吗?

那么如果是这样的话,有没有办法做一个窗口聚合,仍然支持增量聚合,并且有一个状态后端从崩溃中恢复?

4

1 回答 1

1

AggregateFunction确实只是描述了将输入事件组合成某个结果的机制,该特定类不存储任何数据。

但是,当我们编写如下代码时,Flink 在幕后为我们保留了状态:

input
  .keyBy(<key selector>)
  .window(<window assigner>)
  .aggregate(new AverageAggregate(), new MyProcessWindowFunction());

.keyBy(<key selector>).window(<window assigner>)指示 Flink 为每个键和时间桶保存一个状态,AverageAggregate()MyProcessWindowFunction()在相关时调用我们的代码。

在崩溃或重启的情况下,不会丢失任何数据(假设状态后端配置正确):与 Flink 状态的其他部分一样,这里的状态要么从状态后端检索,要么从上游数据的第一原则重新计算。

于 2021-02-19T07:55:00.403 回答