Apache flink 对随机数源中的一个数求和

Apache flink 对随机数源中的一个数求和,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我刚刚开始学习flink,并尝试构建一个非常基本的玩具示例,它随着时间的推移对一个整数求和,并定期打印到目前为止的总和 我创建了一个随机数生成器源类,如下所示: //RandomNumberSource.java 公共类RandomNumberSource实现SourceFunction{ public volatile boolean isRunning=true; 私有随机兰德; 公共随机数源(){ this.rand=new Random(); } @凌驾 公共无效运行(SourceCon

我刚刚开始学习flink,并尝试构建一个非常基本的玩具示例,它随着时间的推移对一个整数求和,并定期打印到目前为止的总和

我创建了一个随机数生成器源类,如下所示:

//RandomNumberSource.java
公共类RandomNumberSource实现SourceFunction{
public volatile boolean isRunning=true;
私有随机兰德;
公共随机数源(){
this.rand=new Random();
}
@凌驾
公共无效运行(SourceContext ctx)引发异常{
同时(正在运行){
ctx.collect(兰特·耐克斯汀(200));
睡眠(1000L);
}
}
@凌驾
公开作废取消(){
this.isRunning=false;
}
}
如您所见,它每1秒生成一个随机数

现在我该如何对生成的数字求和

//StreamJob.java
公共类精简作业{
公共静态void main(字符串[]args)引发异常{
//设置流执行环境
最终StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
DataStream randomNumber=env.addSource(新的RandomNumberSource());
//伪代码:
//随机数
//.窗口(时间.秒(5))
//.reduce(0,(acc,i)=>acc+i)/(初始值,reducer)
//.sum()
//执行程序
环境执行(“Flink流式随机数和聚合”);
}
}
我添加了伪代码来解释我要做的事情。i、 e每5秒,对所有数字求和并打印出来


我觉得我的方法中缺少了一些东西,可能需要一些关于如何做到这一点的指导。

window
操作符用于键控流。您应该改为使用
windowAll
执行此任务。以下是片段:

    randomNumber
            .windowAll(TumblingProcessingTimeWindows.of(Time.seconds(5)))
            .sum(0)
            .print()
            .setParallelism(1);
另外,请检查各种窗口注意事项的参考