簡體   English   中英

Apache Flink:如何計算DataStream中的事件總數

[英]Apache Flink: How to count the total number of events in a DataStream

我有兩個原始流,我正在加入這些流,然后我要計算已加入的事件總數是多少,尚未加入的事件有多少。 我通過在joinedEventDataStream上使用地圖來執行此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來計算已處理記錄的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM