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

时间:2017-11-12 08:04:24

标签: java apache-flink flink-streaming flink-cep

我有两个原始流,我正在加入这些流,然后我想计算已加入的事件总数和事件数量。我是通过使用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中才会发生这种情况?

1 个答案:

答案 0 :(得分:2)

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

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

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