我正在尝试工作的项目。我已经达到了通过应用计数窗口来处理流的地步。但是,我注意到一种奇特的行为,我无法解释。
似乎通过两个线程处理流,并且输出也分为两个部分。
首先,我注意到通过使用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");
有人可以解释为什么这种行为在弗林克中?我该如何配置?为什么有必要将结果流分开?
并行性我理解对速度很有用(多个线程),但是为什么将结果流分开呢?
通常,我想将结果流(处理后)作为单个文件或TCP流等。正常的工作流程是手动组合两个文件并产生单个输出的工作流程吗?
谢谢!
flink是一个分布式和并行的流处理器。正如您正确说的那样,需要并行化才能实现高通量。应用程序的吞吐量由其最慢的操作员界定。因此,在许多情况下,水槽也需要并行化。
这样说,将水槽的并行性降低到1是非常简单的:
c.writeAsCsv("output").setParallelism(1);
现在,水槽将以单个线程运行,只生成一个文件。