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

How to understand slot sharing and parallelism in Apache Flink

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

说我要用Flink做字数统计,data source只有一个,sink也只有一个

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

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

如果我是对的,我知道同一个任务的子任务不能共享一个slot,那么是不是说AC不能共享一个slot,BD 不能共享插槽?我对吗?我如何分配插槽?我应该将 A + B + Sink 放入一个槽位并将 C + D 放入另一个槽位吗?

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

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

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