开发者社区> 问答> 正文

请问为什么window的reduceFunction不支持RichFunction呢?

问题如title,当然当前Flink的API还是可以实现RichReduceFunction的效果的,就是基于windowFunction或者processWindowFuntion。但是,windowFunc和reduceFunc最大的区别在于windowFunc是窗口触发操作,而reduce是实时的增量操作。 如果说我的窗口计算对于每个record的到来都需要一个极复杂的操作,我更希望在reduce中完成,而不是windowFunc中完成,因为那样会导致整个窗口所有key的数据几乎在同一时刻触发,这会导致压力变高。*来自志愿者整理的flink邮件归档

展开
收起
JACKJACK 2021-12-08 10:51:12 1012 0
1 条回答
写回答
取消 提交回答
  • 对的是我!

    reduceFunction 是和 ReducingStateDescriptor 配合的, 并不是“window的”。“WindowOperator” 的 function 是 “InternalWindowFunction”,这个可以是“RichFunction”。

    Flink 中的 state 除了可以绑定 key,也可以绑定 namespace,只是 namespace并没有直接暴露给用户。如果需要的话,可以自己写个 WindowOperator,暴露个 WindowFunction。

    Interface WindowFunction { // You could do incremental aggregation here. void processElement(Context context, Window window, Element element);

    void fireWindow(Context context, Window window); }

    interface WindowedRuntimeContext { State getWindowedState(StateDescriptor descriptor). }

    把所有 window concepts 交给 WindowOperator,WindowFunction 作具体业务。*来自志愿者整理的flink邮件归档

    2021-12-08 16:35:16
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载