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文件中工作。不过我花了我的周末:)。非常感谢