我正在尝试通过示例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
放入另一个插槽吗?
答案 0 :(得分:1)
默认情况下启用插槽共享。启用插槽共享后,所需的插槽数与并行度最高的任务的并行度相同(本例中为两个)。
在此示例中,调度程序会将A + B + Sink
放入一个插槽,并将C + D
放入另一个插槽。通常不需要配置,甚至不需要考虑太多,因为默认值在大多数情况下都能很好地工作。
如果要完全禁用插槽共享,则此作业将需要5个插槽,每个插槽分别用于A,B,C,D和接收器。但是,禁用插槽共享几乎绝不是一个好主意。只要确保每个插槽都有足够的资源来同时运行所有子任务即可。