Java Flink streaming,究竟是什么';总和';做

Java Flink streaming,究竟是什么';总和';做,java,apache-flink,flink-streaming,Java,Apache Flink,Flink Streaming,我很难理解流媒体,以workcount为例,对于像Kafka这样的无限源,“sum”到底做了什么 DataStream<Tuple2<String, Long>> counts = input ...... .returns(Types.TUPLE(Types.STRING, Types.LONG)) .keyBy(0) .sum(1); 数据

我很难理解流媒体,以workcount为例,对于像Kafka这样的无限源,“sum”到底做了什么

DataStream<Tuple2<String, Long>> counts = input
                ......
                .returns(Types.TUPLE(Types.STRING, Types.LONG))
                .keyBy(0)
                .sum(1);
数据流计数=输入
......
.returns(Types.TUPLE(Types.STRING,Types.LONG))
.keyBy(0)
.总数(1);
我有点理解有时间窗的情况,对我来说就像一个“批次”,因为它有开始和结束时间,但当根本没有时间窗的时候

  • 什么是开始时间和结束时间
  • 当弗林克第三次收到单词“foo”时,“sum”是否会遍历所有旧的“foo”,执行1+1+1,并给出结果“3”。或者,Flink在前一步中以某种方式保存了一个中间结果“2”,所以“sum”只执行2+1
  • 有没有其他方法来求和,我的意思是,使用keyBy(0)。process(…)或其他方法

  • 指定的程序将使用
    sumgaggregator
    转换为
    StreamGroupedReduce
    StreamGroupedReduce
    将持续减少传入数据流,并在每个传入记录之后输出新的减少值

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

    例如:输入流
    1,2,3,4,5
    在求和时将生成以下输出:
    1,3,5,9,14


    如果需要,则可以使用
    keyBy(0)实现相同的行为。进程(…)

    指定的程序将转换为带有
    SumAggregator的
    StreamGroupedReduce
    StreamGroupedReduce
    将持续减少传入数据流,并在每个传入记录之后输出新的减少值

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

    例如:输入流
    1,2,3,4,5
    在求和时将生成以下输出:
    1,3,5,9,14


    如果需要,您可以使用
    keyBy(0)实现相同的行为。process(…)

    谢谢。所以,我觉得Flink通过使用ValueState保存了一个中间结果。谢谢。在我看来,Flink通过使用ValueState保存了一个中间结果。