如何了解Apache Flink中的插槽共享和并行性

时间:2020-05-18 07:00:42

标签: parallel-processing architecture apache-flink flink-streaming

我正在尝试通过示例WordCount找出Flink中的插槽共享和并行性。

enter image description here

说我需要使用Flink进行字计数工作,因此只有一个数据源和一个接收器。

在这种情况下,我可以像上图那样进行设计吗?我的意思是,我在Source + map()上设置了两个子任务,在keyBy()/window()/apply()上设置了两个子任务,换句话说,我有两行:A --- B --- SinkC --- D --- Sink可以获得更好的性能。

例如,有一个数据流:aaabbbaaa。通过上面的设计,我可能会遇到这样的情况:aaabbb进入A --- B,而其他aaa进入C --- D。最后,我可以在aaa: 2, bbb: 1处得到结果Sink。我现在正确吗?

如果我是对的,我知道同一任务的子任务无法共享插槽,这是否意味着AC无法共享插槽,B并且D不能共享一个插槽?我对吗?如何分配插槽?我应该将A + B + Sink放入一个插槽,然后将C + D放入另一个插槽吗?

1 个答案:

答案 0 :(得分:1)

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

在此示例中,调度程序会将A + B + Sink放入一个插槽,并将C + D放入另一个插槽。通常不需要配置,甚至不需要考虑太多,因为默认值在大多数情况下都能很好地工作。

如果要完全禁用插槽共享,则此作业将需要5个插槽,每个插槽分别用于A,B,C,D和接收器。但是,禁用插槽共享几乎绝不是一个好主意。只要确保每个插槽都有足够的资源来同时运行所有子任务即可。

相关问题