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

将Flink操作符平均分配给TaskManager

欧盛
2023-03-14

我正在一个由15台机器组成的裸机集群上制作Flink流媒体应用程序的原型。我使用的是90个任务槽(15x6)的纱线模式

该应用程序从单个Kafka主题读取数据。Kafka主题有15个分区,所以我也将源操作符的并行性设置为15。然而,我发现Flink在某些情况下会将2-4个消费者任务实例分配给同一个taskmanager。这会导致某些节点受到网络限制(Kafka主题是提供大量数据,而机器只有1G NIC),并导致整个数据流出现瓶颈。

有没有办法“强制”或以其他方式指示Flink将任务均匀地分配给所有任务管理器,也许是循环?如果没有,有没有办法手动将任务分配给特定的任务管理器插槽?

共有2个答案

鲜于宏义
2023-03-14

Flink不允许手动分配任务槽,因为在处理故障时,它可以将任务分配给其余的任务管理器。

但是,您可以通过在flink-conf.yaml中设置cluster.evenly-spand-out-slot: true来均匀地分配工作负载

要使其工作,您可能还必须设置taskmanager。numberOfTaskSlots等于每台机器的可用CPU数量,并具有并行性。默认值等于群集中CPU的总数。

夹谷星河
2023-03-14

据我所知,这是不可能的。将任务安排到任务槽中的作业管理器只知道任务槽。它不知道一些任务槽属于一个任务管理器,而另一些属于另一个任务管理器。

 类似资料:
  • 我有一个这样的数据集 我想选择第3列和第4列作为我的键和值,我如何在Apache Flink中执行平均操作。 我最多能做到“按键分组”。但是我无法对每个键的值执行平均运算。

  • 我有一个带有单个碎片的输入动觉流。我创建了一个简单的应用程序,它具有映射函数,但环境级并行度为8。使用线程档案器,当我检查创建的线程时,只有1个线程对map函数和源代码处于活动状态(如文档中所述,查询)。我意识到这是因为我正在环境级别设置并行性。在使用map函数后,是否可以在为其创建的所有并行实例之间分配负载?

  • buffer buffer() 操作符的函数签名: buffer([breakObservable]) buffer 本身意味着我们在等待而不会发出任何值,直到 breakObservable 发生。示例如下: let breakWhen$ = Rx.Observable.timer(1000); let stream$ = Rx.Observable.interval(200) .buffer(

  • 问题内容: 我正在使用。JS框架以表格形式显示数据。它具有服务器模式,并且在此模式下发送许多参数。 例如:,,过滤器值,,等。 因此,我将其付诸实践。我分配给每个请求参数字段,并且工作正常。 但是现在我有几张桌子。因此,我必须执行不同的操作,但要求参数相同,并且它们很多。将粘贴代码从一个动作复制到另一个动作不是一个好主意。 因此,我确实实现了,其中包含正常工作所需的所有参数。 问题是,PARAMS

  • 我正在尝试计算Flink中输入数据流(无窗口)的平均值 输入数据流来自套接字连接,形式为“键值”,如“x 5”