2017-02-24 2472 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

相关问题