并行处理-如何理解ApacheFlink中的槽共享和并行性


0

我试图通过示例WordCount来计算Flink中的槽共享和并行性。

说我需要用Flink做单词计数 job ,只有一个数据源和一个 sink。

在这种情况下,我可以做一个像上图一样的设计吗?我的意思是,我在Source+map()上设置了两个子任务,在keyBy()/window()/apply()上设置了两个子任务,也就是说,我有两行代码:A---B---Sink和C---D---Sink,这样我的性能就更好了。

例如,有一个数据流来了:aaa,bbb,aaa。通过上面的设计,我可能会得到这样一个情况:aaa和bbb进入a---B,另一个aaa进入C---D,最后在水槽处得到aaa:2,bbb:1的结果。我现在是对的吗?

如果我是对的,我知道同一个任务的子任务不能共享一个槽,那么这是否意味着a和C不能共享槽,B和D不能共享槽?我说得对吗?如何分配插槽?我应该把A+B+水槽放在一个插槽里,把C+D放在另一个插槽里吗?

1 答案


0

默认情况下启用插槽共享。启用插槽共享后,所需的插槽数与具有最高并行度的任务的并行度相同(在本例中为两个)。

在本例中,调度程序将把A+B+Sink放入一个插槽,将C+D放入另一个插槽。这不是您通常需要配置的,甚至不需要考虑太多,因为默认值在大多数情况下都能很好地 job 。

如果要完全禁用插槽共享,则此 job将需要5个插槽,分别用于A、B、C、D和 sink。但禁用插槽共享几乎从来不是一个好主意。只需确保每个插槽都有足够的资源并发运行所有子任务。


我来回答

写文章

提问题

面试题