java - 分布式、同步批处理

标签 java akka batch-processing distributed-computing

在我们当前的 Java 项目中,我们需要批处理大量记录。一旦完成此处理,它必须重新开始并再次处理所有记录。此处理必须并行化并分布在多个节点中。

记录本身存储在数据库中。使用一些 ID 范围(例如 1-10000)来标识批处理就足够了。

从高层次的角度来看,我看到了以下步骤:

  1. 一个子任务处理一批记录。
  2. 主任务检查是否有任何子任务仍在运行。如果没有,为每批记录创建一个子任务。

我们大量使用 MongoDB,并考虑在其中持久化子任务。然后,每个节点可以拾取尚未完成的子任务,进行处理并将记录标记为完成。一旦没有未完成的子任务,主任务将重新创建所有子任务。这可能会奏效,但我们正在寻找一种解决方案,我们不需要自己进行繁重的同步工作。

  • 这可能是 akka 的一个可能用例吗? ?
  • 可以akka-persistence用于同步不同节点之间的处理?
  • 是否有任何其他 Java/JVM 框架适合这项工作?

最佳答案

您的问题对于 SO 的格式来说太宽泛了。请阅读此guide在未来提问之前,不要让你的小组成员投票赞成你的问题只是为了夸大明显不恰当的问题 (͡° ͜ʖ ͡°)。

无论如何:

1) 是的,您可以在 Akka 中实现您的要求。特别是,由于您提到了多个节点,您正在查看 akka-cluster 模块(用于节点间通信),并且您可能还需要 akka-cluster-sharding(以防您希望在处理过程中将所有数据保存在内存中) ).

2) 不,我强烈不推荐这样做。虽然您可以在技术上强制您的问题使用 akka-persistence 来同步任务,但 akka-persistence 的目标只是让 actor 的状态持久化。 Akka 本身的基本形式足以处理所有同步问题。只需让主参与者为每个子任务创建一个工作人员并监控其完成情况。

3) 是的。请注意,无论什么工作,这个问题的答案总是肯定的。

关于java - 分布式、同步批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43694063/

相关文章:

java - 从正确的对象引用中使用 volatile 变量

scala - 作曲 Actor

java - Akka:在参与者之间通信和处理特殊状态(非错误)

java - JobOperator 无法实例化

jakarta-ee - Glassfish 设置并发批处理作业的最大数量

java - 如何在批处理中获取包含异常的精确sql查询

java - 重用复杂的 spring-fox swagger 注释

java - Gradle junit编码问题

java - “海拔”不在 ViewPager 中显示阴影

playframework - Akka 的语言和产品替代品有哪些?