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");

有人可以解释为什么这种行为在弗林克中?我该如何配置?为什么有必要将结果流分开?

并行性我理解对速度很有用(多个线程),但是为什么将结果流分开呢?

通常,我想将结果流(处理后)作为单个文件或TCP流等。正常的工作流程是手动组合两个文件并产生单个输出的工作流程吗?

谢谢!

flink是一个分布式和并行的流处理器。正如您正确说的那样,需要并行化才能实现高通量。应用程序的吞吐量由其最慢的操作员界定。因此,在许多情况下,水槽也需要并行化。

这样说,将水槽的并行性降低到1是非常简单的: c.writeAsCsv("output").setParallelism(1);

现在,水槽将以单个线程运行,只生成一个文件。

相关内容

  • 没有找到相关文章

最新更新