2015-12-14 129 views

回答

1

在Storm中沒有對此的內建支持。但是,你可以編寫你自己的解決方案:

  1. 不要ACK(或失敗)的失敗元組,緩衝它在內部數據結構(即,成員變量;也許List),並從​​
  2. 返回
  3. 繼續處理​​中的更多元組,直到您想要重試(可能是某個計時器,即您可能想要獲取當前時間戳或基於重試計數器)。
  4. 重試之前,在處理新的輸入元組之前,從緩衝區接收失敗的元組並嘗試插入到DB中。如果再次失敗,請再次插入緩衝區。如果插入成功,則確認緩衝元組並恢復處理當前輸入元組。

你只需要考慮Storm的MESSAGE_TIMEOUT。重試時間不能超過此值,因爲如果元組在超時值內未得到響應,Storm會自動在源處失敗元組。

2

您可以將輸出「scorpion tail」流添加到螺栓。流將被任何螺栓開始重試過程讀取。這將在拓撲中創建一個循環。這個想法是,當發生故障時,您可以向該流寫入一個信息包,並將元組傳送到上游螺栓,以開始重試。數據包包含重試所需的任何狀態。

+0

這個答案。 +如果您注意到元組來自「scorpion tail」流,則重試策略應該不同(例如更長的超時)。 –

相關問題