当前位置: 首页 > 知识库问答 >
问题:

Flink,一个插槽可以有多个线程还是只有一个线程?

冯阳华
2023-03-14

在Flink中,像“平面地图”、“地图”等运算符称为任务,如果我将平面地图的并行度设置为30,那么这个任务有30个子任务。

现在,如果我只有一个插槽,它会在一个插槽中产生多个线程吗?还是每个插槽只有一个线程?

Flink会在该插槽中简单地创建30个线程,还是使用类似线程池的东西?

以上不是一个恰当的例子。

假设在作业中我有操作符flatMap和map,它们都有并行度1,我只有一个插槽,这个插槽会创建两个线程吗?(链接已禁用)

共有1个答案

于飞飙
2023-03-14

每个任务槽可以包含多个子任务(运算符)。但是,一个槽不能包含同一个运算符的多个实例——即它可以共享不同的平面图map等子任务,但不能共享几个相同的maps。链式运算符在同一线程中执行,同时不链式-在不同的线程中。

因此,在您的情况下,如果将平面图的平行性指定为30,flink将需要30个插槽来分配这些子任务。它无法将所有30个子任务分配给单个插槽。

但是,您可以通过taskmanager指定每个任务管理器的插槽数。TaskSlots数量。因此,您可以获取一个只有1个vcore的容器,但可以为其分配30个插槽,从而获得30个单独的线程,并将子任务分配给单个vcore。

请参阅Flink官方留档的任务槽和资源部分。

更新:正如DavidAnderson所指出的,

一个任务槽可能有许多线程。每个子任务都在单独的JVM线程中执行,任务槽基本上是一个线程池

 类似资料:
  • 浏览器是一个页面一个线程吗? 还是一个页面可以有多个线程?

  • 几天来,我一直在探索Apache Flink,我对任务槽的概念有些怀疑。虽然有人问了几个问题,但有一点我不明白。 我正在使用一个toy应用程序进行测试,运行一个本地集群。我已禁用操作员链接 我从文档中知道插槽允许内存隔离而不是CPU隔离。阅读文档,任务槽似乎是一个Java线程。 1)当我以并行度=1部署我的应用程序时,所有运算符的子任务都部署在同一个插槽中。但是,如果我从的方法打印当前线程ID,我

  • 问题内容: 线程都是可运行的,并且它们拥有相同的锁。两个线程都可以运行时,它们可以锁定相同的地址吗?那是JRE错误吗? 问题答案: 该问题仅存在于线程转储中。实际上,在任何时间点,锁都仅由一个线程持有。但是,线程转储显示两个具有相同锁的不同线程,因为它不是原子的。 可以使用以下程序轻松重现该行为:

  • 我是Flink的新手。据我了解,在Flink中,一个TaskManager可以分成多个插槽,一个插槽可以分配多个任务,一个任务是一个线程。 让我们看看WordCount示例: 据我所知,一个任务就是一个线程,有三个任务:<代码>源映射() ,<代码>keyBy()/窗口()/应用() 和<代码>接收器 。所以每个都有自己的线程,这意味着我们需要三个线程来完成这个示例。我们可以将三个任务(三个线程)

  • 以下是问题陈述: 编写一个java程序,使用线程计算前25个素数,并计算前50个斐波那契数。将计算斐波那契数的线程的优先级设置为8,将另一个设置为5。在计算了30个斐波那契数之后,让这个线程进入睡眠状态,开始计算素数。计算完25个素数后,继续斐波那契数计算。 我的代码: 我本以为当斐波那契线停止时,其余的素数会被打印出来,但那没有发生,这背后的原因可能是什么?

  • 我用的是Netty camel-Netty:jar:2 . 10 . 0 . red hat-60024。下面是我对Netty监听器的配置 荨麻:tcp://10.1.33.204:9001?textline=true 在这里,我看到基于调试日志,Netty只创建一个工作线程,所以传入的消息被阻塞,直到现有的消息被处理。 喜欢: 2014-08-23 12:36:48,394|DEBUG|w I/