2017-02-24 88 views
1

我試圖在工作中使用flink。我已經達到了通過應用計數窗口等來處理流的點。但是,我注意到了一個奇特的行爲,這是我無法解釋的。Flink將SingleOutputStreamOperator寫入兩個文件而不是一個

似乎一個流由兩個線程處理,並且輸出也分爲兩部分。

首先我注意到使用stream.print()將流打印到標準控制檯時的行爲。

然後,我打印到一個文件,它實際上打印在輸出文件夾中名爲12的兩個文件中。

SingleOutputStreamOperator<Tuple3<String, String,String>> c = stream_with_no_err.countWindow(4).apply(new CountPerWindowFunction()); 
    // c.print() // this olso prints two streams in the standard console 

    c.writeAsCsv("output"); 

有人可以請解釋爲什麼這種行爲在flink?我如何配置它?爲什麼需要將結果流拆分?並行性我理解爲對速度(多線程)有用,但爲什麼產生的流會分裂?

通常,我想將生成的流(處理後)作爲單個文件或tcp流等。正常的工作流程是手動合併這兩個文件並生成單個輸出嗎?

謝謝!

回答

1

Flink是一個分佈式並行流處理器。正如你所說的,並行化對於實現高吞吐量是必要的。應用程序的吞吐量受其最慢的操作員限制。所以在很多情況下,接收器也需要並行化。

話雖如此,它是超級簡單水槽的並行性降低到1:現在 c.writeAsCsv("output").setParallelism(1);

,水槽將運行一個線程,只產生一個單一的文件。

+0

謝謝!一切都清楚了! – cmcaba

相關問題