flink将singleoutputstreamoperator写入两个文件而不是一个文件

92vpleto  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(451)

我正在努力争取一个工作项目。我已经达到了通过应用计数窗口等来处理流的程度。但是,我注意到一个特殊的行为,我无法解释。
似乎一个流是由两个线程处理的,并且输出也分为两部分。
首先,我注意到使用将流打印到标准控制台时的行为 stream.print() .
然后,我打印到一个文件,它实际上打印在两个名为 1 以及 2 ,在输出文件夹中。

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流等。是正常的工作流手动组合两个文件,并产生一个单一的输出?
谢谢!

72qzrwbm

72qzrwbm1#

flink是一个分布式并行流处理器。正如您所说的,并行化是实现高吞吐量所必需的。应用程序的吞吐量受其最慢运算符的限制。因此,在许多情况下,Flume也需要并联。
说到这里,将Flume的平行度降低到1: c.writeAsCsv("output").setParallelism(1); 现在,接收器将作为单个线程运行,并且只生成单个文件。

相关问题