开发者社区> 问答> 正文

Flink SQL UDAF中调用createAccumulator的调用时机是怎样的?能调用几次呢

最近有几个疑问没能很好地理解清楚:

我们都知道,UDAF中的有createAccumulator这个方法,那么:

这个方法的调用时机是什么呢,会被调用几次呢?

一个accumulator的生命周期是怎么样的?

一个accumulator会被反复的序列化反序列化吗?

麻烦了解相关细节的社区的同学们帮忙解答一下~

先谢谢啦*来自志愿者整理的FLINK邮件归档

展开
收起
玛丽莲梦嘉 2021-12-03 18:19:25 1221 0
1 条回答
写回答
取消 提交回答
  • 这个调用的时机是每个key的第一条数据来的时候,会创建一个accumulator。创建的次数大约是key的数量。 当然这里说的是regular groupby; 如果是window group by的话,就是每个window都会做上面的这个事情。

    如果是window group by的话,那它的生命周期就是跟window是一样的。 如果是regular groupby的话,可以认为是全局的。除非有一条数据retract掉了当前的结果之后,等于被聚合的 数据是0条的时候,也会销毁。

    这个问题非常好。它是否序列化跟你用的state backend有关系。 如果是rocksdb的话,是会每次更新都会存一次state。如果不是rocksdb,它就是一个内存里的数据结构,只有在 checkpoint的时候序列化。 当然这个在regular groupby的情况下,开启mini batch会减少每次都需要更新state的情况。*来自志愿者整理的FLINK邮件归档

    2021-12-03 18:50:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载