Java ApacheFlink:如何计算数据流中的事件总数

Java ApacheFlink:如何计算数据流中的事件总数,java,apache-flink,flink-streaming,flink-cep,Java,Apache Flink,Flink Streaming,Flink Cep,我有两个原始流,我正在连接这些流,然后我想计算已连接的事件总数和未连接的事件总数。我通过使用joinedEventDataStream上的映射来实现这一点,如下所示 joinedEventDataStream.map(new RichMapFunction<JoinedEvent, Object>() { @Override public Object map(JoinedEvent joinedEvent) throws Excep

我有两个原始流,我正在连接这些流,然后我想计算已连接的事件总数和未连接的事件总数。我通过使用
joinedEventDataStream
上的映射来实现这一点,如下所示

joinedEventDataStream.map(new RichMapFunction<JoinedEvent, Object>() {

            @Override
            public Object map(JoinedEvent joinedEvent) throws Exception {

                number_of_joined_events += 1;

                return null;
            }
        });
joinedEventDataStream.map(新的RichMapFunction(){
@凌驾
公共对象映射(JoinedEvent JoinedEvent)引发异常{
加入的事件数+=1;
返回null;
}
});
问题#1:这是计算流中事件数量的适当方法吗


问题#2:我注意到一种有线行为,你们中的一些人可能不相信。问题是,当我在IntelliJ IDE中运行我的Flink程序时,它向我显示了
numberofujoined\u事件的正确值
,但在我以
jar
的形式提交此程序时,
0
。因此,当我将程序作为
jar
文件运行时,我得到的是
number\u of\u joined\u events
的初始值,而不是实际计数。为什么只有在提交
jar
文件而不是在IDE中才会发生这种情况?

您的方法不起作用。您在通过JAR文件执行程序时注意到的行为是预期的

我不知道如何定义加入事件的数量,但我假设它是程序中的一个静态变量。当您在IDE中运行程序时,它在单个JVM中运行。因此,所有运算符都可以访问静态变量。当您向远程进程提交JAR文件时,程序将在不同的JVM(可能是多个JVM)中执行,并且客户端进程中的静态变量永远不会更新


您可以使用Flink的度量或求和
1
s的
ReduceFunction
来计算已处理记录的数量。

wow,你的天才。这是一个静态变量,我在joinedDataStrem中使用了累加器,它在jar文件中工作。不过我花了我的周末:)。非常感谢