Apache Flink:如何计算DataStream中的事件总数

我有两个原始流,我正在加入这些流,然后我想计算已加入的事件总数和事件没有多少。 我是通过在joinedEventDataStream上使用map来joinedEventDataStream ,如下所示

 joinedEventDataStream.map(new RichMapFunction() { @Override public Object map(JoinedEvent joinedEvent) throws Exception { number_of_joined_events += 1; return null; } }); 

问题1:这是计算流中事件数量的适当方法吗?

问题2:我注意到有线行为,有些人可能不相信。 问题是,当我在IntelliJ IDE中运行我的Flink程序时,它会向我显示number_of_joined_events正确值,但在我将此程序设置为jar时会显示0 。 所以当我将程序作为jar文件而不是实际计数运行时,我得到number_of_joined_events的初始值。 为什么只在jar文件提交而不在IDE中才会发生这种情况?

你的方法不起作用。 您希望通过JAR文件执行程序时注意到的行为。

我不知道如何定义number_of_joined_events ,但我认为它是程序中的静态变量。 在IDE中运行程序时,它在单个JVM中运行。 因此,所有操作员都可以访问静态变量。 将JAR文件提交到远程进程时,程序在不同的JVM(可能是多个JVM)中执行,并且客户端进程中的静态变量永远不会更新。

您可以使用Flink的指标或ReduceFunction 1秒的ReduceFunction来计算已处理记录的数量。