gpt4 book ai didi

apache-flink - 在 Flink 中,我可以在同一个槽中有一个运算符(operator)的多个子任务吗?

转载 作者:行者123 更新时间:2023-12-05 08:31:47 25 4
gpt4 key购买 nike

这几天一直在摸索Apache Flink,对Task Slot这个概念有些疑惑。虽然已经问了几个问题,但有一点我不明白。

我正在使用玩具应用程序进行测试,运行本地集群。我禁用了运算符链接

我从文档中了解到插槽允许内存隔离而不是 CPU 隔离。阅读文档,Task Slot 似乎是一个 Java 线程。

1) 当我使用 parallelism=1 部署我的应用程序时,所有运算符(operator)的子任务都部署在同一个槽中。但是,如果我从 AbstractStreamOperatoropen() 方法打印当前线程 ID,我会看到不同子任务的不同 ID。那么,它们不是共享同一个线程(即插槽吗?)。

2) 如果我将并行度从 1 更改为 3,我需要 3 个插槽才能正确重新部署应用程序。文档确认插槽的数量限制了我可以拥有的并行度。但为什么我可以在同一个槽中有不同运算符(operator)的子任务,而不能在同一个槽中有相同运算符(operator)的子任务?

感谢任何解释!

最佳答案

槽的想法是将可用资源分割成更小的部分。可用的托管内存均匀分布在所有插槽中。 CPU 周期和 JVM 堆内存未正确隔离 wrt 插槽。

在每个插槽中,您可以部署一个或多个任务。 Flink Task 由专用线程执行。因此,如果您部署了多个 Task,则可以在同一个槽中运行多个线程。

Task 表示单个 Flink 运算符或多个运算符的并行实例(如果它们是可链接的)。链接并不总是可行或需要的,但如果应用它,它将融合运算符,以便它们由相同的 Task 线程执行。这通常效率更高,因为上下文切换更少,并且不会将记录移交给不同的线程。

为了提高资源利用率(特别是对于需要很少资源的Tasks),并且为了更容易地推理出运行一个Flink程序需要多少slots,Flink支持slot sharing。插槽共享意味着不同算子的并行实例可以部署到同一个插槽。由于这个特性,Flink 会创建尽可能长的不同算子的管道,并将它们部署到同一个槽中。这也有很好的效果,您可以增加生产者与其各自消费者的共处。由于此功能,用户知道他们只需要提供与一个拓扑的所有运算符的最大并行度一样多的插槽。

但是,由于您仍然希望将一个算子的并行实例分布到所有可用的 TaskExecutors 中,因此 Flink 不支持将同一个算子的并行实例部署到同一个槽中。如果你想这样做,那么你应该简单地将相应运算符的并行度降低到 1

关于apache-flink - 在 Flink 中,我可以在同一个槽中有一个运算符(operator)的多个子任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55590809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com