群集环境中的Java Batch作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了群集环境中的Java Batch作业相关的知识,希望对你有一定的参考价值。

我们有一个包含2个JBOSS节点的集群。我们有一个批处理作业,它将所有用户详细信息从活动目录加载到数据库。这项工作每天都在运行。它之前在非集群环境中运行,因此我们将其设计为单例。现在我们有一个集群环境,我不知道什么是实现相同结果的最佳方法。我希望批处理作业每天只运行一次。我们使用spring和hibernate,然后看了Spring批处理。我无法对我的问题得到任何简明的答案。

如果你在集群环境中实现批处理,请问有谁可以告诉我吗?在这种情况下,最好的解决方案是什么?

答案

我们通过MQ从外部触发和启动作业来实现这一点(启动作业的http请求也可以工作)。调度程序将消息放入队列中,即使我们有'n'个节点侦听队列,一个节点也会收到消息并根据其内容启动作业。您也可以使用HTTP执行此操作。

对此的真正“解决方案”是将批处理作业“外部”安排,而不是通过内部cron触发器。实际的启动机制是次要的。

另一答案

还要考虑https://github.com/willschipp/spring-batch-cluster的特点

  • 批处理作业存储库的后写
  • 群集中的批处理HA(执行作业的自动停止和故障转移)
另一答案

通常,从事务系统中外部化/隔离批处理作业有时是个好主意,因此它们不会干扰可用性或性能。话虽这么说,如果有充分的理由在集群应用程序中嵌入批处理作业(简单性,代码重用等),那么除了已经提到的解决方案之外,ShedLock是一个很好的选择。

关于它的价值,请注意关于qazxsw poi的博客文章。

以上是关于群集环境中的Java Batch作业的主要内容,如果未能解决你的问题,请参考以下文章

火花作业中的 Azure databricks 群集错误:ExecutorLostFailure

Java Spring Boot 加 Spring Batch 创建 Jar 并仅运行特定作业

如何覆盖 AWS Batch 作业中的 docker 映像?

python 使用Wordcount作业创建EMR群集作为Boto3中的步骤

为啥 AWS Batch 作业卡在 RUNNABLE 中?

Spring Batch:根据 itemReader 中的结果执行作业