为了账号安全,请及时绑定邮箱和手机立即绑定

Flink 流媒体,“sum”到底是做什么的?

Flink 流媒体,“sum”到底是做什么的?

哈士奇WWW 2022-07-20 16:49:08
我无法理解流式传输,以工作计数为例,对于像 Kafka 这样的无限源,“sum”到底是做什么的?DataStream<Tuple2<String, Long>> counts = input                 ......                 .returns(Types.TUPLE(Types.STRING, Types.LONG))                 .keyBy(0)                 .sum(1);当有时间窗口时我有点理解,对我来说就像一个“批次”,因为它有开始和结束时间,但是当根本没有时间窗口时,开始时间和结束时间是什么时候?当 Flink 第三次接收到单词 'foo' 时,'sum' 是否会遍历所有旧的 'foo',做 1+1+1,并给出结果 '3'。或者,Flink 以某种方式在上一步中保存了一个中间结果 '2',所以 'sum' 只做 2+1?有没有另一种方法来求和,我的意思是,使用 keyBy(0).process(...) 什么的?
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

指定的程序将转换为StreamGroupedReduce带有SumAggregator. 它将做的StreamGroupedReduce是不断减少传入的数据流并在每个传入记录之后输出新的减少值。

在内部,StreamGroupedReduce使用 aValueState来保持当前的减少值。每当有新记录到达时,当前的 reduce 值都会通过调用ReduceFunction(在您的情况下SumAggregator)与传入记录相结合。然后,此操作的结果存储在操作员中ValueState并输出到下游消费者。

例如:输入流1, 2, 3, 4, 5在求和时会产生如下输出:1, 3, 5, 9, 14.

如果需要,您可以使用keyBy(0).process(...).


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号