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

Parallel processing 如何理解ApacheFlink中的插槽共享和并行性,parallel-processing,architecture,apache-flink,flink-streaming,Parallel Processing,Architecture,Apache Flink,Flink Streaming,我试图通过WordCount示例来了解Flink中的插槽共享和并行性 说我需要用Flink做字数统计工作,只有一个数据源和一个接收器 在这种情况下,我可以做一个设计,就像上面的图片?我的意思是,我在Source+map上设置了两个子任务,在keyBy/window/apply上设置了两个子任务,换句话说,我有两行:A-B-Sink和C-D-Sink,这样我可以获得更好的性能 例如,有一个数据流出现:aaa、bbb、aaa。通过上面的设计,我可能会得到这样的情况:aaa和bbb进入a-B,另一个a

我试图通过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的结果。我现在对吗


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

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

在本例中,调度程序将A+B+接收器放入一个插槽,C+D放入另一个插槽。这通常不需要配置,甚至不需要考虑太多,因为默认设置在大多数情况下都能正常工作


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

因此,如果我在本例中只设置一个插槽,Flink会怎么做?它会因为至少需要两个插槽而引发一些异常吗?