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

时间:2013-05-16 17:50:27

标签: java clojure apache-storm

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

到目前为止,我已经考虑过以下几点:

  • 使用Java的Thread.sleep。 (但是,根据一些讨论,这不是有效利用Storm资源的推荐方法。)
  • 使用延迟队列...
  • Storm是否有一些API用于延迟我忽略的消息?
  • ZeroMQ是否提供Storm(如果已修改)可以利用的延迟消息传递API?

2 个答案:

答案 0 :(得分:5)

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

我们还在数量激增的情况下使用redis,如果检测到音量峰值,则所有元组都会重定向到每个主机上的本地redis存储,然后在音量降低后被推回拓扑处理。我们的情况可能不适用于您的情况,只是我的2c。

答案 1 :(得分:2)

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

由于Storm是容错的并且是水平分布的,因此选择适合该样式的消息队列是有意义的,例如:

  • 卡夫卡
  • 亚马逊SQS
  • 的RabbitMQ