如何理解apache flink中的函数setparallelism

xqk2d5yq  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(541)

https://ci.apache.org/projects/flink/flink-docs-stable/dev/parallel.html
我正在读Flink的这篇文章,我不太了解执行环境级别的部分。
让我们以wordcount为例。

所以如果我编码 env.setParallelism(3); 在这个例子中,是否意味着我将有三条平行的 Source + map() --- keyBy()/window()/apply() --- Sink ? 让我困惑的是如果我有三个 Sink s、 我怎样才能得到正确的结果?
如果只有一个 Sink ,我想不会有任何问题。我是说不管有多少 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() 在这个例子中还是我误解了什么?

ht4b089n

ht4b089n1#

有一个平行的Flume本身并没有什么问题。例如,kafka接收器的不同示例将写入不同的分区。streamingfilesink将并行写入不同的bucket,各种数据库连接器可以更新或插入不同密钥的记录等。可伸缩流处理要求管道的所有部分都能够伸缩,包括接收器。
在您描述的管道这样的情况下,可以将窗和Flume链接在一起。如果接收器是一个打印接收器,并且它是并行使用的,那么每个任务管理器都会将其结果片段写入本地输出文件。显然,如果您的目标是将所有结果放在一个地方,那么这不是很方便,在这种情况下,您需要将sink操作符的并行度设置为1。但许多应用程序没有这样的要求。

相关问题