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



>我有两个原始流,我正在加入这些流,然后我想计算已加入的事件总数以及未加入的事件总数。我通过使用地图来执行此操作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的正确值,但在我以 jar 提交该程序时0。因此,当我将程序作为jar文件运行时,我获得了number_of_joined_events的初始值,而不是实际计数。为什么仅在提交文件jar的情况下才会发生这种情况,而不是在 IDE 中?

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

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

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

相关内容

  • 没有找到相关文章

最新更新