Architecture 如何理解ApacheFlink中的函数setParallelism

Architecture 如何理解ApacheFlink中的函数setParallelism,architecture,apache-flink,flink-streaming,Architecture,Apache Flink,Flink Streaming,我正在读弗林克的这篇文档,我不能很好地理解执行环境级别的部分 让我们使用WordCount的例子 因此,如果我编码env.setParallelism(3)在本例中,这是否意味着我将有三条并行管道,分别是源代码+映射()--keyBy()/window()/apply()--Sink?让我困惑的是,如果我有三个Sinks,我如何才能正确得到结果 如果只有一个接收器,我想不会有任何问题。我的意思是,无论我有多少个Source+map(),只有Sink可以产生一个结果。但现在我有三个Sinks /

我正在读弗林克的这篇文档,我不能很好地理解执行环境级别的部分

让我们使用WordCount的例子

因此,如果我编码
env.setParallelism(3)
在本例中,这是否意味着我将有三条并行管道,分别是
源代码+映射()--keyBy()/window()/apply()--Sink
?让我困惑的是,如果我有三个
Sink
s,我如何才能正确得到结果

如果只有一个
接收器
,我想不会有任何问题。我的意思是,无论我有多少个
Source+map()
,只有
Sink
可以产生一个结果。但现在我有三个
Sink
s

// Case 1
Source + map() --- keyBy()/window()/apply() ----\
Source + map() --- keyBy()/window()/apply() --- Sink (the only Sink will merge the outputs coming from three pipelines and produce only one result)
Source + map() --- keyBy()/window()/apply() ----/

// Case 2
Source + map() --- keyBy()/window()/apply() --- Sink
Source + map() --- keyBy()/window()/apply() --- Sink
Source + map() --- keyBy()/window()/apply() --- Sink
// There are three sinks, how could I get the result?

因此,在本例中,我们不应该使用
setParallelism()
,否则我会误解什么?

使用并行接收器本身并没有什么问题。例如,Kafka接收器的不同实例将写入不同的分区。StreamingFileLink将并行写入不同的存储桶,各种数据库连接器可以更新或插入不同密钥的记录,等等。可扩展流处理要求管道的所有部分都能够扩展,包括接收器

在您描述的管道这样的情况下,窗和水槽可以链接在一起。如果接收器是一个打印接收器,并且并行使用,那么每个任务管理器都会将其结果片段写入本地输出文件。显然,如果您的目标是将所有结果放在一个地方,那么这并不十分方便,在这种情况下,您需要将sink操作符的并行度设置为1。但许多应用程序没有这样的要求