You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Flink集群中的作业迁移至其他TaskManager

1. 手动触发作业重平衡

针对正在运行的作业,直接触发重平衡就能让Task重新分配到其他TM:

  • UI操作:打开Flink UI进入对应作业页面,点顶部「Run」选「Rebalance」,确认后作业会自动把Task均匀分散到所有可用TM,减轻问题节点的负载。
  • 命令行操作:执行CLI命令:
    flink modify <你的作业ID> --rebalance
    

2. 限制问题TM的Task Slot数量

修改问题TM的flink-conf.yaml配置,减少它能接收的Task数量,从根源上降低负载:

# 比如原本是4个slot,改成2个,让Flink少分配Task过来
taskmanager.numberOfTaskSlots: 2

同时可以调整该TM的内存配置,避免Flink和其他服务抢内存:

taskmanager.memory.process.size: 4g
taskmanager.memory.task.heap.size: 2g

3. 提交作业时指定分配策略

在作业代码里设置Placement Constraint,让Task优先分配到其他三个TM:

// 创建只允许在指定TM运行的Slot共享组
SlotSharingGroup preferredGroup = SlotSharingGroup.newBuilder("normal-tm-group")
    .setPlacementConstraint(PlacementConstraint.newBuilder()
        .requireHost("tm-1-host,tm-2-host,tm-3-host") // 排除有其他服务的TM主机名
        .build())
    .build();
// 把算子绑定到这个组
dataStream.slotSharingGroup(preferredGroup);

这样作业启动后就不会把Task分配到问题节点上。

4. 临时移除问题TM再重新加入

如果问题节点频繁断开,先把它从集群移除:

  • 在Flink UI的「Task Managers」页面找到目标TM,点击「Remove」,集群会自动把上面的Task迁移到其他节点。
  • 等负载转移完成后,重启该TM的Flink服务,让它重新加入集群,此时Flink只会根据剩余slot分配新Task,不会过载。

内容的提问来源于stack exchange,提问作者moluzhui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:59:58