我有一个数据流,基本上是一个sql表,每分钟添加30-50条记录。需要以接近实时的速度进行处理(记录在数据库中出现后大约10分钟内进行处理)。我想在这里使用一些类似工作流的解决方案,使我更容易处理所有记录。我需要这个解决方案具有高可用性-系统应该在单独的硬件节点上工作,并且在其中一个节点发生故障时具有容错性。基本上会发生这样的情况:
一条新记录被添加到数据库中
工作流开始处理它
做一些事情作为处理的结果(发送电子邮件,插入数据库等)
框架应该记住记录已经被处理过了
另一个要求是,如果在处理其中一条记录的过程中出现错误,则不应阻止框架处理其他记录。它应该记住这个特殊的记录需要重新处理。
我听说twitter风暴也做了类似的事情,但在这里使用它不是一种过度杀伤力吗?据我所知,它的主要目的是并发处理大量的数据,而我在这里根本不需要这些数据。
2条答案
按热度按时间2ledvvac1#
请记住,storm不执行持久性操作,因此您将以流的形式处理数据,然后在数据流的末尾执行持久性操作(或者在中间、开头等处执行持久性操作。实际上,拓扑结构中的某个地方的一个螺栓会将其写出来)。
storm将解决您在容错和处理保证方面的问题。但是在30-50个元组(storm数据抽象)的情况下,使用它可能确实是“过度杀伤力”。但接下来的问题是,您可以多么轻松地编写自己的系统,使其仍具有storm所具有的数据处理保证(例如,如果系统中的某个节点发生故障,但正在处理某些数据,则该数据会发生什么变化?)。我可以告诉你,建立一个拓扑并运行它是非常简单的。storm使用的抽象一点也不难处理(流、元组、螺栓和喷口)。如果你还没有,我建议你看一下关于它的技术讲座:http://www.youtube.com/watch?v=bikms3hilj4
jogvjijk2#
您可以使用
Apache Camel
以及ActiveMQ
. 故障节点将引发异常,未处理的消息可能会发送回AMQ
稍后处理的队列(可能还有其他节点)。