我有两个原始流,我正在加入这些流,然后我想计算已加入的事件总数和事件数量。我是通过使用joinedEventDataStream
上的地图来完成此操作的,如下所示
joinedEventDataStream.map(new RichMapFunction<JoinedEvent, Object>() {
@Override
public Object map(JoinedEvent joinedEvent) throws Exception {
number_of_joined_events += 1;
return null;
}
});
问题#1:这是计算流中事件数量的合适方式吗?
问题#2:我注意到有线行为,有些人可能不相信。问题是,当我在IntelliJ IDE中运行我的Flink程序时,它显示number_of_joined_events
的正确值,但0
在我将此程序作为jar
提交时的正确值。因此,当我将程序作为number_of_joined_events
文件而不是实际计数运行时,我得到jar
的初始值。为什么只有jar
文件提交而不是IDE中才会发生这种情况?
答案 0 :(得分:2)
你的方法不起作用。您希望通过JAR文件执行程序时注意到的行为。
我不知道如何定义number_of_joined_events
,但我认为它是程序中的静态变量。在IDE中运行程序时,它在单个JVM中运行。因此,所有操作员都可以访问静态变量。当您将JAR文件提交到远程进程时,程序将在不同的JVM(可能是多个JVM)中执行,并且客户端进程中的静态变量永远不会更新。
您可以使用Flink的指标或ReduceFunction
总结1
来计算已处理记录的数量。