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

Dav*_* J. 5 java clojure apache-storm

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

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

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

小智 5

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

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


Dav*_* J. 2

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

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

  • 卡夫卡
  • 亚马逊SQS
  • RabbitMQ