Java数据处理工作流框架



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

  • 一个新记录被添加到数据库
  • 工作流开始处理它
  • 做一些事情作为处理的结果(发送电子邮件,插入数据库等)
  • 框架应该记住记录已经被处理过了

另一个要求是,如果在处理其中一条记录期间出现错误,它不应该阻止框架处理其他记录。它应该记住这个特定的记录需要重新处理。

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

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

记住Storm不做持久化,所以你会把数据作为一个流来处理,然后在它的末尾(或者在中间,开始,等等)做持久化。从本质上讲,拓扑中的某个地方的一个螺栓会把它写出来)。

Storm将解决你的问题,当涉及到容错,并保证处理。但是在30-50元组(Storm数据抽象)中,使用它可能确实是"过度的"。但接下来的问题就变成了你如何轻松地编写自己的系统,并且仍然具有Storm所拥有的保证数据处理(例如,如果系统中的一个节点宕机,但正在处理某些数据,该数据会发生什么?)。我可以告诉您,设置拓扑并运行它非常简单。Storm使用的抽象并不难处理(流、元组、螺栓和喷流)。如果你还没有看过,我建议你看这个技术讲座:http://www.youtube.com/watch?v=biKMS3HILJ4

最新更新