Storm中延迟的队列/消息处理



在我的Storm拓扑中,当处理一个流时,我想延迟一些消息的处理,直到将来的某个时间点。有哪些合理的选择呢?

到目前为止,我已经考虑了以下内容:

  • 使用Java的Thread.sleep。(然而,根据一些讨论,这不是一个有效利用Storm资源的推荐方法。)
  • 使用延迟队列…
    • 特别是,尝试java.util.concurrent.DelayQueue.
    • 还有其他值得尝试的实现吗?
  • Storm有一些API来延迟我忽略的消息吗?
  • ZeroMQ是否提供了Storm(如果修改)可以利用的延迟消息传递API ?

我们使用拓扑标记元组来批量处理挂起的元组。它基本上只是将它们存储在每个正常元组的内存中,当它接收到一个tick元组时,它使用批量/流水线处理将它们处理到存储/索引中。

我们也使用redis在情况下,我们有巨大的峰值在卷,如果一个卷峰值检测到所有元组重定向到本地redis存储在每个主机上,然后被推回拓扑处理后,卷死亡。我们的情况可能不适用于你们的,只适用于我的。

使用外部消息队列实现延时队列

由于Storm是容错和水平分布的,所以选择适合这种风格的消息队列是有意义的,例如:

    卡夫卡
  • Amazon SQS
  • RabbitMQ

最新更新