Apache Flink:如何计算DataStream中的事件总数
我有两个原始流,我正在加入这些流,然后我要计算已加入的事件总数是多少,尚未加入的事件有多少。我通过使用joinedEventDataStream
如下所示的地图来做到这一点
joinedEventDataStream.map(new RichMapFunction<JoinedEvent, Object>() { @Override
public Object map(JoinedEvent joinedEvent) throws Exception {
number_of_joined_events += 1;
return null;
}
});
这是计算流中事件数量的适当方法吗?
我注意到一种有线行为,有些人可能不相信。问题是,当我在IntelliJ
IDE中运行Flink程序时,它显示了的正确值,number_of_joined_events
但是0
当我将该程序提交为时jar
。因此,我获得了number_of_joined_events
将程序作为jar
文件运行而不是实际计数时的初始值。为什么仅在jar
提交文件而不在IDE中发生这种情况?
回答:
您的方法无效。通过JAR文件执行程序时,您会注意到行为。
我不知道该如何number_of_joined_events
定义,但是我假设它在您的程序中是一个静态变量。当您在IDE中运行该程序时,它将在单个JVM中运行。因此,所有运算符都可以访问静态变量。当您将JAR文件提交到远程进程时,程序将在其他JVM(可能是多个JVM)中执行,并且客户端进程中的静态变量永远不会更新。
您可以使用Flink的指标或的ReduceFunction
总和1
来计算已处理记录的数量。
以上是 Apache Flink:如何计算DataStream中的事件总数 的全部内容, 来源链接: utcz.com/qa/402863.html