【问题标题】:Java data processing workflow frameworkJava数据处理工作流框架
【发布时间】:2013-01-15 13:53:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java workflow apache-storm


    【解决方案1】:

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

    【讨论】:

    • Storm 要记住的一点是它是容错的。如果您推出自己的处理系统,我不确定您可以获得多大的容错能力。在遇到硬件和其他故障时,Storm 中的数据处理有非常强的保证。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2017-03-12
      • 1970-01-01
      • 2012-11-18
      • 2012-01-18
      • 1970-01-01
      相关资源
      最近更新 更多