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