• Elastic Job入门(2)


    运维平台

    elastic-job-lite-console-${version}.tar.gz可通过mvn install编译获取,下载源码,进入console目录,执行:

    mvn clean install -Dmaven.test.skip=true 

    解压缩elastic-job-lite-console-${version}.tar.gz并执行binstart.sh。打开浏览器访问http://localhost:8899/即可访问控制台。8899为默认端口号,可通过启动脚本输入-p自定义端口号。

    提供两种账户,管理员及访客,管理员拥有全部操作权限,访客仅拥有察看权限。默认管理员用户名和密码是root/root,访客用户名和密码是guest/guest,可通过confauth.properties修改管理员及访客用户名及密码。

    • 登录安全控制

    • 注册中心、事件追踪数据源管理

    • 快捷修改作业设置

    • 作业和服务器维度状态查看

    • 操作作业禁用启用、停止和删除等生命周期

    • 事件追踪查询

    添加作业 作业在首次运行时将自动添加。Elastic-Job-Lite以jar方式启动,并无作业分发功能。如需完全通过运维平台发布作业,请使用Elastic-Job-Cloud。

    JavaCode配置

    注册中心配置

    属性名类型构造器注入缺省值描述
    serverLists String   连接Zookeeper服务器的列表
    包括IP地址和端口号
    多个地址用逗号分隔
    如: host1:2181,host2:2181
    namespace String   Zookeeper的命名空间
    baseSleepTimeMilliseconds int 1000 等待重试的间隔时间的初始值
    单位:毫秒
    maxSleepTimeMilliseconds String 3000 等待重试的间隔时间的最大值
    单位:毫秒
    maxRetries String 3 最大重试次数
    sessionTimeoutMilliseconds boolean 60000 会话超时时间
    单位:毫秒
    connectionTimeoutMilliseconds boolean 15000 连接超时时间
    单位:毫秒
    digest String   连接Zookeeper的权限令牌
    缺省为不需要权限验证

     

    作业配置

    作业配置分为3级,分别是JobCoreConfiguration,JobTypeConfiguration和LiteJobConfiguration。LiteJobConfiguration使用JobTypeConfiguration,JobTypeConfiguration使用JobCoreConfiguration,层层嵌套。 JobTypeConfiguration根据不同实现类型分为SimpleJobConfiguration,DataflowJobConfiguration和ScriptJobConfiguration。

    JobCoreConfiguration:

    属性名类型构造器注入缺省值描述
    jobName String   作业名称
    cron String   cron表达式,用于控制作业触发时间
    shardingTotalCount int   作业分片总数
    shardingItemParameters String   分片序列号和参数用等号分隔,多个键值对用逗号分隔
    分片序列号从0开始,不可大于或等于作业分片总数
    如:
    0=a,1=b,2=c
    jobParameter String   作业自定义参数
    作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业
    例:每次获取的数据量、作业实例从数据库读取的主键等
    failover boolean false 是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,允许将该次未完成的任务在另一作业节点上补偿执行
    misfire boolean true 是否开启错过任务重新执行
    description String   作业描述信息
    jobProperties Enum   配置jobProperties定义的枚举控制Elastic-Job的实现细节
    JOB_EXCEPTION_HANDLER用于扩展异常处理类
    EXECUTOR_SERVICE_HANDLER用于扩展作业处理线程池类

    SimpleJobConfiguration:

    属性名类型构造器注入缺省值描述
    coreConfig JobCoreConfiguration    
    jobClass String   作业实现类,需实现ElasticJob接口

    DataflowJobConfiguration:

    属性名类型构造器注入缺省值描述
    coreConfig JobCoreConfiguration    
    jobClass String   作业实现类,需实现ElasticJob接口
    streamingProcess boolean false 是否流式处理数据
    如果流式处理数据, 则fetchData不返回空结果将持续执行作业
    如果非流式处理数据, 则处理数据完成后作业结束

    ScriptJobConfiguration:

    属性名类型构造器注入缺省值描述
    coreConfig JobCoreConfiguration    
    scriptCommandLine String   脚本型作业执行命令行

    LiteJobConfiguration:

    属性名类型构造器注入缺省值描述
    jobConfig JobTypeConfiguration    
    monitorExecution boolean true 监控作业运行时状态
    每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。
    每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。
    monitorPort int -1 作业监控端口
    建议配置作业监控端口, 方便开发者dump作业信息。
    使用方法: echo “dump” | nc 127.0.0.1 9888
    maxTimeDiffSeconds int -1 最大允许的本机与注册中心的时间误差秒数
    如果时间误差超过配置秒数则作业启动时将抛异常
    配置为-1表示不校验时间误差
    jobShardingStrategyClass String -1 作业分片策略实现类全路径
    默认使用平均分配策略
    详情参见:作业分片策略
    reconcileIntervalMinutes int 10 修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复
    单位:分钟
    eventTraceRdbDataSource String   作业事件追踪的数据源Bean引用

     

     

     

     

     

     

    作业分片策略

    AverageAllocationJobShardingStrategy

    居于平均分配算法的分片策略,也是默认的分片策略。如果分片不能整除,则不能整除的分片将依次追加到序号小的服务器。

    缺点:一旦分片数小于作业服务器数,作业将永远分配至IP地址靠前的服务器,导致IP地址靠后的服务器空闲。

    OdevitySortByNameJobShardingStrategy

    根据作业名称的哈希值奇数偶数决定IP升降序算法的分片策略。作业名的哈希值为奇数则IP升序,作业名的哈希值为偶数则IP降序。用于不同的作业平均分配负载至不同的服务器。

    RotateServerByNameJobShardingStrategy

    根据作业名的哈希值对服务器列表进行轮转的分片策略。

    自定义分片策略

    实现JobShardingStrategy接口并实现sharding方法,接口方法参数为作业服务器IP列表和分片策略选项,分片策略选项包括作业名称,分片总数以及分片序列号和个性化参数对照表,可以根据需求定制化自己的分片策略。

    事件追踪

    通过事件订阅的方式处理调度过程中的重要事件,用于查询、统计和监控,基于关系型数据库。一般对作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。

        // 初始化数据源
        DataSource dataSource = ...;
        // 定义日志数据库事件溯源配置
        JobEventConfiguration jobEventRdbConfig = new JobEventRdbConfiguration(dataSource);
        // 初始化注册中心
        CoordinatorRegistryCenter regCenter = ...;
        // 初始化作业配置
        LiteJobConfiguration liteJobConfig = ...;
        new JobScheduler(regCenter, liteJobConfig, jobEventRdbConfig).init(); 

    登陆console管理端,可以查询:

    DUMP作业运行信息

     生产环境调试,方便开发者debug:

    public class JobMain {
        public static void main(final String[] args) {
            // ...
            jobConfig.setMonitorPort(9888);
            // ...
        }
    }

    命令:

    echo "dump" | nc <任意一台作业服务器IP> 9888
    echo "dump" | nc <任意一台作业服务器IP> 9888 > job_debug.txt

    作业监听器

    每台作业节点均执行的监听

    定义监听器:

    public class MyElasticJobListener implements ElasticJobListener {
        
        @Override
        public void beforeJobExecuted(ShardingContexts shardingContexts) {
            // do something ...
        }
        
        @Override
        public void afterJobExecuted(ShardingContexts shardingContexts) {
            // do something ...
        }
    }

    将监听器作为参数传入JobScheduler:

    public class JobMain {
        
        public static void main(String[] args) {
            new JobScheduler(createRegistryCenter(), createJobConfiguration(), new MyElasticJobListener()).init();
        }
        
        private static CoordinatorRegistryCenter createRegistryCenter() {
            CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo"));
            regCenter.init();
            return regCenter;
        }
        
        private static LiteJobConfiguration createJobConfiguration() {
            // 创建作业配置
            ...
        }
    }

    分布式场景中仅单一节点执行的监听

    定义监听器:

    public class TestDistributeOnceElasticJobListener extends AbstractDistributeOnceElasticJobListener {
        
        public TestDistributeOnceElasticJobListener(long startTimeoutMills, long completeTimeoutMills) {
            super(startTimeoutMills, completeTimeoutMills);
        }
        
        @Override
        public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
            // do something ...
        }
        
        @Override
        public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
            // do something ...
        }
    }

    将监听器作为参数传入JobScheduler:

    public class JobMain {
        
        public static void main(String[] args) {
            long startTimeoutMills = 5000L;
            long completeTimeoutMills = 10000L;
            new JobScheduler(createRegistryCenter(), createJobConfiguration(), new MyDistributeOnceElasticJobListener(startTimeoutMills, completeTimeoutMills)).init();
        }
        
        private static CoordinatorRegistryCenter createRegistryCenter() {
            CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo"));
            regCenter.init();
            return regCenter;
        }
        
        private static LiteJobConfiguration createJobConfiguration() {
            // 创建作业配置
            ...
        }
    }

    自诊断修复

    分布式场景下,由于网络、时钟等原因,导致ZooKeeper的数据与真实运行的作业产生不一致,需要设置状态修复服务,指定间隔时间执行:

    public class JobMain {
        public static void main(final String[] args) {
            // ...
            LiteJobConfiguration.newBuilder(simpleJobConfig).reconcileIntervalMinutes(10).build();
            // ...
        }
    }
  • 相关阅读:
    对于石家庄铁道大学软件个人总结
    Android Studio安装
    典型用户模板和用户场景模板
    java+jsp+sql server实现网页版四则运算.
    四则运算一
    学习进度
    构建之法阅读笔记(一)
    记账本小程序7天开发记录(第一天)
    javabean+jsp+servlet+jdbc从软件安装到开发实例
    编写一个文件分割工具,能把一个大文件分割成多个小的文件。并且能再次把它们合并起来得到完整的文件。
  • 原文地址:https://www.cnblogs.com/ijavanese/p/9962174.html
Copyright © 2020-2023  润新知