apache-flink - Flink 任务管理器中的 slot 是什么?
问题描述
在 Apache Flink 系统架构中,我们有 Client 进程、主进程(JobManager)、工作进程(TaskManager)的概念。
上面的每个进程基本上都是一个 JVM 进程。TaskManager 执行单个任务,每个任务都在一个线程中执行。所以这个管理器到进程或任务到线程的映射是明确的。
TaskManager 中的插槽呢?插槽映射到什么?
解决方案
Flink 中的任务槽是资源管理和调度的主要单元。
当 Dispatcher(Flink Master 的一部分)接收到要执行的作业时,它会查看作业的执行图以查看执行它需要多少个槽,并从资源管理器请求这些槽。然后,资源管理器将尽其所能获取这些插槽(有一个 Yarn 资源管理器、一个 Kubernetes 资源管理器等)。例如,Kubernetes 资源管理器将根据需要启动新的任务管理器 pod 以创建更多插槽。
每个任务管理器都配置有一定数量的内存、一定数量的 CPU 内核,以及它为执行任务提供的一定数量的插槽。这些插槽共享任务管理器可用的资源。
通常,一个槽会被分配来自作业的一个并行切片的任务,并且执行作业所需的槽数通常与具有最高并行度的任务的并行度相同。我说“通常”是因为如果你禁用槽共享(槽共享允许多个任务共享同一个槽),那么将需要更多槽——但几乎没有一个很好的理由来禁用槽共享。
下图显示了一个简单作业的执行图,其中 source、map 和 window 运算符的并行度为 2,sink 的并行度为 1。source 和 map 已经链接到一个任务中,所以这个执行图总共包含 5 个需要分配给任务槽的任务。
下图显示了两个 TM,每个都有一个插槽,您可以看到调度程序如何在这 2 个插槽中分配 5 个任务。
推荐阅读
- java - NumberFormatException:从文件读取时输入字符串“\N”
- c# - Kendo MVC DropdownTree 不显示所选值
- docker - 如何运行 Docker 映像的多个实例?
- amazon-web-services - 在 AWS 中存储服务器文件的正确位置在哪里
- html - 在标签和输入上使用 id 标签有什么区别?
- c - CreateRemoteThread 上的进程注入器崩溃
- java - 按下按钮后如何使用自己的 ActionListener 类将文本附加到 JTextArea
- configuration - 如何在高级 REST 客户端独立应用程序中删除已保存的项目?
- ruby - 在骰子游戏中确定多轮获胜者的功能问题
- server - ISPConfig 服务错误的站点