Java数据处理工作流框架

Java数据处理工作流框架,java,workflow,apache-storm,Java,Workflow,Apache Storm,我有一个数据流,基本上是一个SQL表,每分钟添加30-50条记录。需要以接近实时的速度进行处理(记录出现在数据库中后大约10分钟内进行处理)。我想在这里使用一些类似工作流的解决方案,使我更容易处理所有记录。我需要此解决方案具有高可用性-系统应在单独的硬件节点上工作,并且在其中一个节点发生故障时具有容错能力。基本上会发生这样的情况: 新记录将添加到数据库中 工作流将开始处理它 做一些事情作为处理的结果(发送电子邮件,插入数据库等) 框架应该记住记录已经被处理过了 另一个要求是,如果在处理其中一

我有一个数据流,基本上是一个SQL表,每分钟添加30-50条记录。需要以接近实时的速度进行处理(记录出现在数据库中后大约10分钟内进行处理)。我想在这里使用一些类似工作流的解决方案,使我更容易处理所有记录。我需要此解决方案具有高可用性-系统应在单独的硬件节点上工作,并且在其中一个节点发生故障时具有容错能力。基本上会发生这样的情况:

  • 新记录将添加到数据库中
  • 工作流将开始处理它
  • 做一些事情作为处理的结果(发送电子邮件,插入数据库等)
  • 框架应该记住记录已经被处理过了
另一个要求是,如果在处理其中一条记录的过程中出现错误,则不应阻止框架处理其他记录。它应该记住这些特殊的记录需要重新处理


我听说twitter storm做了类似的事情,但在这里使用它不是有点过分吗?据我所知,它的主要目的是并发处理大量数据,而我在这里根本不需要这些数据。

您可以使用
Apache-Camel
ActiveMQ
构建完美的可扩展解决方案。故障节点将抛出异常,未处理的消息可能会发送回
AMQ
队列,以便稍后(可能与其他节点一起)进行处理。

请记住,Storm不会持久化,因此您将以流的形式处理数据,然后在其末尾执行持久化(或者在中间,开始等基本上是一个在你的拓扑结构中的某个螺栓将写出来)。
Storm可以解决您在容错和处理保证方面的问题。但是在30-50元组(Storm数据抽象)的情况下,使用它可能确实是“矫枉过正”的。但问题是,您可以多么容易地编写自己的系统,而它仍然具有Storm所具有的数据处理保证(例如,如果系统中的一个节点下降,但在处理某些数据的过程中,数据会发生什么?)我可以告诉你,建立一个拓扑并运行它是非常简单的。抽象风暴使用起来并不困难(流、Tuples、螺栓和喷口)。。如果您还没有,我建议您观看关于它的技术讲座:

关于Storm,需要记住的一件事是它是容错的。我不确定如果您使用自己的处理系统,您可以获得多大的容错性。面对硬件和其他故障,Storm中的数据处理有非常强的保证。