我正在努力争取一个工作项目。我已经达到了通过应用计数窗口等来处理流的程度。但是,我注意到一个特殊的行为,我无法解释。
似乎一个流是由两个线程处理的,并且输出也分为两部分。
首先,我注意到使用将流打印到标准控制台时的行为 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流等。是正常的工作流手动组合两个文件,并产生一个单一的输出?
谢谢!
1条答案
按热度按时间72qzrwbm1#
flink是一个分布式并行流处理器。正如您所说的,并行化是实现高吞吐量所必需的。应用程序的吞吐量受其最慢运算符的限制。因此,在许多情况下,Flume也需要并联。
说到这里,将Flume的平行度降低到1:
c.writeAsCsv("output").setParallelism(1);
现在,接收器将作为单个线程运行,并且只生成单个文件。