2015-05-14 157 views
2

我正在使用卡夫卡風暴整合。 Kafka會將數據加載到隊列中,Kafka Spout將提取數據和進程。我有以下設計。風暴KafkaSpout失敗,當螺栓很慢

Kafka -> Queue -> KafkaSpout -> Process1 Bolt -> Process2 Bolt 

問題是,如果進程2博爾特正在較長的時間來處理KafkaSpout是越來越失敗的數據,並再次嘗試讀取數據從隊列這會導致重複的記錄。

如果螺栓加工緩慢,爲什麼KafkaSpout將其視爲失敗?解決辦法是什麼?是否有任何超時或任何類似的屬性,我必須在風暴中設置?

回答

3

如果處理時間過長,默認30秒,Storm會失敗一個元組。自Storm guarantees processing以來,一旦失敗,Kafka噴口將重放相同的消息,直到成功處理元組。


From doc

元組被認爲是失敗時它的消息的樹未能在規定的超時時間內得到充分的處理。可以使用Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS配置在特定於拓撲的基礎上配置此超時,默認值爲30秒