Apache Flink资源管理器(App Master)在第一个任务管理器在空闲超时后被杀死后无法分配新的任务管理器。
创始人
2024-09-04 02:01:39
0

在Apache Flink中,可以通过设置slot.timeout属性来解决任务管理器空闲超时问题。以下是一个示例代码,说明如何设置slot.timeout属性:

import org.apache.flink.configuration.Configuration;
import org.apache.flink.configuration.JobManagerOptions;
import org.apache.flink.runtime.jobmaster.JobMaster;
import org.apache.flink.runtime.jobmaster.slotpool.SlotPool;
import org.apache.flink.runtime.jobmaster.slotpool.SlotReport;
import org.apache.flink.runtime.jobmaster.slotpool.SlotRequest;
import org.apache.flink.runtime.resourcemanager.ResourceManager;
import org.apache.flink.runtime.resourcemanager.SlotRequestTimeoutListener;
import org.apache.flink.runtime.resourcemanager.slotmanager.SlotManager;
import org.apache.flink.runtime.taskexecutor.slot.SlotOffer;
import org.apache.flink.util.Preconditions;

import javax.annotation.Nullable;

public class CustomResourceManager extends ResourceManager {

    // 定义空闲超时时间
    private final long idleTimeout;

    public CustomResourceManager(
            Configuration configuration,
            SlotManager slotManager,
            SlotPool slotPool,
            JobMaster jobMaster,
            long idleTimeout) {
        super(configuration, slotManager, slotPool, jobMaster);

        Preconditions.checkArgument(idleTimeout >= 0, "Idle timeout must be >= 0");
        this.idleTimeout = idleTimeout;
    }

    @Override
    public void start() throws Exception {
        super.start();

        // 注册空闲超时监听器
        getFencingToken().getLeaderElectionService().addListener(
                new SlotRequestTimeoutListener(getFencingToken().toUUID(), getIdleTimeout()));
    }

    public long getIdleTimeout() {
        return idleTimeout;
    }

    public static CustomResourceManager create(
            Configuration configuration,
            SlotManager slotManager,
            SlotPool slotPool,
            JobMaster jobMaster,
            long idleTimeout) throws Exception {
        return new CustomResourceManager(configuration, slotManager, slotPool, jobMaster, idleTimeout);
    }

    public static void main(String[] args) throws Exception {
        Configuration configuration = new Configuration();
        // 设置任务管理器空闲超时时间为10分钟
        configuration.setLong(JobManagerOptions.SLOT_IDLE_TIMEOUT, 600000);

        // 创建自定义资源管理器
        CustomResourceManager resourceManager = create(
                configuration,
                slotManager,
                slotPool,
                jobMaster,
                600000);

        // 启动资源管理器
        resourceManager.start();
    }
}

在上述代码中,CustomResourceManager类继承自ResourceManager类,并添加了一个idleTimeout成员变量,表示任务管理器空闲超时时间。在start()方法中,注册了一个空闲超时监听器,当任务管理器空闲超时时,会触发该监听器。

main()方法中,通过JobManagerOptions.SLOT_IDLE_TIMEOUT属性设置了任务管理器的空闲超时时间为10分钟(600000毫秒),然后创建了一个CustomResourceManager实例,并调用start()方法启动资源管理器。

请根据你的实际情况调整超时时间和其他配置。

相关内容

热门资讯

安卓系统怎么连不上carlif... 安卓系统无法连接CarLife的原因及解决方法随着智能手机的普及,CarLife这一车载互联功能为驾...
iwatch怎么连接安卓系统,... 你有没有想过,那款时尚又实用的iWatch,竟然只能和iPhone好上好?别急,今天就来给你揭秘,怎...
oppo手机安卓系统换成苹果系... OPPO手机安卓系统换成苹果系统:现实吗?如何操作?随着智能手机市场的不断发展,用户对于手机系统的需...
安卓平板改windows 系统... 你有没有想过,你的安卓平板电脑是不是也能变身成Windows系统的超级英雄呢?想象在同一个设备上,你...
iphone系统与安卓系统更新... 最近是不是你也遇到了这样的烦恼?手机更新系统总是失败,急得你团团转。别急,今天就来给你揭秘为什么iP...
安卓系统上滑按键,便捷生活与高... 你有没有发现,现在手机屏幕越来越大,操作起来却越来越方便了呢?这都得归功于安卓系统上的那些神奇的上滑...
安卓系统连接耳机模式,蓝牙、有... 亲爱的手机控们,你们有没有遇到过这种情况:手机突然变成了“耳机模式”,明明耳机没插,声音却只从耳机孔...
希沃系统怎么装安卓系统,解锁更... 亲爱的读者们,你是否也像我一样,对希沃一体机上的安卓系统充满了好奇呢?想象在教室里,你的希沃一体机不...
安装了Anaconda之后找不... 在安装Anaconda后,如果找不到Jupyter Notebook,可以尝试以下解决方法:检查环境...
安卓换鸿蒙系统会卡吗,体验流畅... 最近手机圈可是热闹非凡呢!不少安卓用户都在议论纷纷,说鸿蒙系统要来啦!那么,安卓手机换上鸿蒙系统后,...