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

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

我试图用wordcount这个例子来说明flink中的插槽共享和并行性。

说我需要和flink一起做字数统计工作,只有一个数据源和一个接收器。
在这种情况下,我可以做一个像上面的图片一样的设计吗?我的意思是,我设定了两个子任务 Source + map() 和两个子任务 keyBy()/window()/apply() 换句话说,我有两行: A --- B --- Sink 以及 C --- D --- Sink 这样我才能有更好的表现。
例如,有一个数据流: aaa , bbb , aaa . 有了上面的设计,我可能会遇到这样的情况: aaa 以及 bbb 进入 A --- B 另一个呢 aaa 进入 C --- D . 最后,我可以得到结果 aaa: 2, bbb: 1Sink . 我现在对吗?
如果我是对的,我知道同一任务的子任务不能共享一个槽,那么这是否意味着 A 以及 C 无法共享插槽, B 以及 D 不能共享插槽?我说得对吗?如何分配插槽?我应该把 A + B + Sink 放进一个槽里 C + D 换个位置?

6tdlim6h

6tdlim6h1#

默认情况下启用插槽共享。启用插槽共享后,所需的插槽数与具有最高并行度的任务的并行度相同(本例中为两个)。
在本例中,调度程序将 A + B + Sink 在一个插槽中,然后 C + D 变成另一个。这不是您通常需要配置的,甚至不需要考虑太多,因为默认值在大多数情况下都很好地工作。
如果要完全禁用插槽共享,则此作业将需要5个插槽,a、b、c、d和接收器各一个。但禁用槽共享几乎从来不是一个好主意。只需确保每个插槽有足够的资源并发运行所有子任务。

相关问题