我试图用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: 1
在 Sink
. 我现在对吗?
如果我是对的,我知道同一任务的子任务不能共享一个槽,那么这是否意味着 A
以及 C
无法共享插槽, B
以及 D
不能共享插槽?我说得对吗?如何分配插槽?我应该把 A + B + Sink
放进一个槽里 C + D
换个位置?
1条答案
按热度按时间6tdlim6h1#
默认情况下启用插槽共享。启用插槽共享后,所需的插槽数与具有最高并行度的任务的并行度相同(本例中为两个)。
在本例中,调度程序将
A + B + Sink
在一个插槽中,然后C + D
变成另一个。这不是您通常需要配置的,甚至不需要考虑太多,因为默认值在大多数情况下都很好地工作。如果要完全禁用插槽共享,则此作业将需要5个插槽,a、b、c、d和接收器各一个。但禁用槽共享几乎从来不是一个好主意。只需确保每个插槽有足够的资源并发运行所有子任务。