1

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

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

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

我听说 twitter-storm 做了类似的事情,但在这里使用它不是矫枉过正吗?据我了解,它的主要目的是同时处理大量数据,我在这里根本不需要。

4

2 回答 2

1

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

于 2013-01-15T13:56:26.900 回答
1

请记住,Storm 不进行持久化,因此您会将数据作为流处理,然后在其末尾(或中间、开头等)进行持久化。本质上,拓扑中的某个螺栓会将其写出来)。

当涉及到容错和处理保证时,Storm 将解决您的问题。但是在 30-50 个元组(Storm 数据抽象)上,使用它可能确实“过大”。但是接下来的问题就变成了你可以多么容易地编写自己的系统,该系统仍然具有Storm 所具有的数据处理保证(例如,如果你系统中的一个节点出现故障,但正在处理一些数据,会发生什么?那个数据?)。我可以告诉你,设置拓扑并运行它非常简单。Storm 使用的抽象并不难处理(Streams、Tuples、Bolts 和 Spout)。如果您还没有,我建议您观看此技术讲座: http ://www.youtube.com/watch?v=biKMS3HILJ4

于 2013-01-15T20:33:09.807 回答