schema-如何理解ApacheFlink中的槽和任务


0

我读了很多关于这个问题的文档,但是我仍然被两个概念所迷惑:slot和task。

让我们看看WordCount的例子。

据我所知,每个黄色圆圈都是一个运算符,Flink可以进行一些优化,这意味着它可以将多个运算符 coalesce 为一个运算符 chaining。在本例中,可以 coalesce Source和map(),使其变成如下所示:

整个流变成三个任务:Source+map()、KeyBy()/window()/apply()和Slink。

如果我是对的,那么一个槽就是Flink的TaskManager中的一个线程,所以我现在很困惑。在这个例子中,我们有三个任务,所以这意味着我们必须有三个槽位(每个任务都有自己的线程),还是意味着我们必须为这个例子创建一个有三个槽位的TaskManager?如果TaskManager只有一个或两个插槽怎么办?如果少于三个插槽,会抛出一些异常?

1 答案


0

一个插槽不是一个线程。一个插槽可以有多个线程。

一个任务可以有多个并行实例,这些实例称为子任务。每个子任务在单独的线程中运行。

来自不同任务的多个子任务可以组合在一起并共享一个槽。这组子任务称为插槽共享组。请注意,同一任务的两个子任务(同一任务的并行实例)不能共享一个槽。

任务管理器中的槽数表示它可以支持的最大并行度。例如,如果 job的并行度为每个运算符一。它可以在具有一个插槽的任务管理器中运行。原因是所有子任务共享同一个时隙,并且属于一个时隙共享组。

让我们考虑另一个例子。假设任务管理器有一个槽,单词计数 job的并行度为1,除了KeyBy()/window()/apply()有3个。当您提交此 job时,它将失败,因为您只有一个槽。KeyBy()/window()/apply()的一个子任务将与Source+Map和Sink子任务共享一个槽。但是其他两个子任务找不到槽(因为同一任务的两个子任务不能像前面提到的那样共享一个槽)


我来回答

写文章

提问题

面试题