开发者社区> 问答> 正文

TableAggregateFunction 的什么方法可以提升流式任务的效率呢?

TableAggregateFunction 的什么方法可以提升流式任务的效率呢?

展开
收起
游客qzzytmszf3zhq 2021-12-07 20:37:01 260 0
1 条回答
写回答
取消 提交回答
  • emitUpdateWithRetract() 在 retract 模式下,该方法负责发送被更新的值。 emitValue 方法会发送所有 accumulator 给出的结果。拿 TopN 来说,emitValue 每次都会发送所有的最大的 n 个值。这在流式任务中可能会有一些性能问题。为了提升性能,用户可以实现 emitUpdateWithRetract 方法。这个方法在 retract 模式下会增量的输出结果,比如有数据更新了,我们必须要撤回老的数据,然后再发送新的数据。如果定义了 emitUpdateWithRetract 方法,那它会优先于 emitValue 方法被使用,因为一般认为 emitUpdateWithRetract 会更加高效,因为它的输出是增量的。

    TableAggregateFunction 的所有方法都必须是 public 的、非 static 的,而且名字必须跟上面提到的一样。createAccumulator、getResultType 和 getAccumulatorType 这三个方法是在抽象父类 TableAggregateFunction 中定义的,而其他的方法都是约定的方法。要实现一个表值聚合函数,你必须扩展 org.apache.flink.table.functions.TableAggregateFunction,并且实现一个(或者多个)accumulate 方法。accumulate 方法可以有多个重载的方法,也可以支持变长参数。

    2021-12-07 20:37:17
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
效率提升:表格存储实时数据流:Stream的技术揭秘和应用场景 立即下载
凡普实时数据处理架构 立即下载
基于streaming构建统一的数据处理引擎的挑战与实践 立即下载