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
来计算已处理记录的数量。