我在理解流式传输时遇到了麻烦,以工作量为例,对于像卡夫卡这样的无限来源,“和”到底是做什么的?
DataStream<Tuple2<String, Long>> counts = input
......
.returns(Types.TUPLE(Types.STRING, Types.LONG))
.keyBy(0)
.sum(1);
当有时间窗口时,我有点理解,因为它有开始时间和结束时间,但对我来说就像一个“批处理”,但是当根本没有时间窗口时,
答案 0 :(得分:2)
指定的程序将转换为带有StreamGroupedReduce
的{{1}}。 SumAggregator
要做的是连续减少输入数据流,并在每条输入记录之后输出新的减小的值。
在内部,StreamGroupedReduce
使用StreamGroupedReduce
保留当前的缩减值。每当有新记录到达时,就通过调用ValueState
(在您的情况下为ReduceFunction
中)将当前的减少值与传入的记录合并。然后,此操作的结果存储在操作员的SumAggregator
中,并输出到下游使用者。
例如:输入流ValueState
求和时将产生以下输出:1, 2, 3, 4, 5
。
如果需要,可以使用1, 3, 5, 9, 14
实现相同的行为。