繁体   English   中英

有没有办法在Storm中重试Bolt?

[英]Is there a way to retry a Bolt in Storm?

我们有一个执行数据库保存的应用程序。 如果保存失败,是否有办法仅重试失败的螺栓? 我们不想一直失败,直到壶嘴。

您可以将输出“蝎尾”流添加到螺栓。 无论哪个螺栓将开始重试过程,都将读取该流。 这将在拓扑中创建一个循环。 这个想法是,当发生故障时,您可以向该流中写入信息包,并将元组传递到上游螺栓,从而开始重试。 数据包包含重试所需的任何状态。

Storm没有对此的内置支持。 但是,您可以编写自己的解决方案代码:

  1. 不要确认(或失败)失败的元组,将其缓冲在内部数据结构(即成员变量;可能是List )中,并从execute()返回
  2. 继续在execute()处理其他元组,直到您想重试(也许是某个计时器,即,您可能想要获取当前时间戳或基于计数器重试)。
  3. 在重试时,在处理新的输入元组之前,请从缓冲区中接收失败的元组,然后尝试插入数据库中。 如果再次失败,请再次插入缓冲区。 如果插入成功,则确认缓冲的元组并恢复处理当前的输入元组。

您只需要考虑Storm的MESSAGE_TIMEOUT 重试的时间不能长于该值,因为如果未在超时值内确认元组,Storm会自动在源处使元组失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM