当前位置: 首页 > article >正文

如何解决Elastic Job Lite任务分配到不健康实例问题?

服务使用k8s 管理部署,有一个job服务,该服务有3个实例,服务实例挂了一个,事后发现依旧有任务分配到已经挂的任务实例上,导致任务没有执行?

原因:

Elastic Job Lite 本身不会自动检测和考虑实例的健康状态来进行任务分配。它主要依赖于注册中心(如 Zookeeper)来协调作业分片和实例的关系。虽然通过zk来检测实例的存活,但是它默认是不会利用这个信息来调整任务的分配。

解决方案:

  • 手动移除已经挂掉的服务实例IP,在elastic job lite控制面板有一个服务器维度,我们删除已经挂掉的服务器ip就可以了。
  • 重启挂掉的服务实例。
  • 自定义分配策略,基于服务实例的健康状态,来分配任务分片。
import com.dangdang.ddframe.job.executor.ShardingContexts;
import com.dangdang.ddframe.job.lite.api.listener.AbstractDistributeOnceElasticJobListener;
// 自定义作业监听器,用于健康检查
public class MyJobListener extends AbstractDistributeOnceElasticJobListener {
    public MyJobListener() {
        super(0L, 0L);
    }
    @Override
    public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
        // 在作业执行前检查实例状态,这里可以通过和实例通信或者检查注册中心状态来判断实例是否健康
        for (ShardingContext context : shardingContexts.getShardingItemParameters().keySet()) {
            // 假设检查实例是否健康的方法为isInstanceHealthy
            if (!isInstanceHealthy(context.getJobInstanceId())) {
                // 如果实例不健康,重新分配任务
                // 这里只是示例,实际重新分配任务的逻辑可能更复杂
                // 可以通过修改注册中心的任务分配信息等方式来实现
                System.out.println("Instance is not healthy, need to re - assign tasks.");
            }
        }
    }
    @Override
    public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
        // 作业执行后的逻辑
    }
    private boolean isInstanceHealthy(String instanceId) {
        // 实际的健康检查逻辑,例如检查实例的心跳等
        return true;
    }
}```


http://www.kler.cn/a/446420.html

相关文章:

  • 「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
  • Leetcode Hot 100 【二叉树】104. 二叉树的最大深度
  • 多音轨视频使用FFmpeg删除不要音轨方法
  • 【Tomcat】第六站(最后一站啦!):数据的返回
  • MCU驱动使用
  • 林子雨-大数据课程实验报告(一)
  • Java 中 wait 和 sleep 的区别:从原理到实践全解析
  • lua dofile 传参数
  • GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录
  • 基于 Python 将 PDF 转 Markdown 并拆解为 JSON,支持自定义标题处理
  • Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍
  • Python Turtle图形库基本命令详解
  • leetcode之hot100---160相交链表(C++)
  • MFC/C++学习系列之简单记录2——thread和Release
  • 【服务器】MyBatis是如何在java中使用并进行分页的?
  • 中阳科技的量化交易模型:从理论到实践的全面探索
  • 1688跨境代购代采:API赋能的自动化与信息化革新
  • 【NLP 18、新词发现和TF·IDF】
  • git中的tag标签远程管理
  • Linux禁用网络、开启网络
  • Docker:Dockerfile(补充四)
  • 贪心算法 greedy
  • CEF127 编译指南 MacOS 篇 - 拉取 CEF 源码(五)
  • 多进程、多线程、分布式测试支持-pytest-xdis插件
  • 零基础学习OpenFOAM:从流体力学与人工智能的交叉科学,流场预测与重构,气动信息预测,基于深度强化学习的气动优化出发
  • 计算机网络:运输层 —— TCP 的选择确认(SACK)