当螺栓很慢时,Storm KafkaSpout会失败

时间:2015-05-14 10:09:31

标签: java apache-kafka apache-storm

使用Kafka-Storm集成。 Kafka将数据加载到队列中,Kafka Spout将提取数据和进程。我有以下设计。

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

问题是,如果Process2 Bolt需要更长的时间来处理数据,KafkaSpout就会失败并再次尝试从队列中读取数据,这会导致重复的记录。

如果Bolt处理缓慢,为什么KafkaSpout将其视为失败?解决办法是什么?是否有任何超时或任何类似的属性我必须在风暴中设置?

1 个答案:

答案 0 :(得分:3)

如果处理时间太长,Storm将失败一个元组,默认为30秒。自Storm guarantees processing以来,一旦失败,Kafka spout将重播相同的消息,直到成功处理元组。


From doc

  

如果在指定的超时内无法完全处理其消息树,则认为该元组失败。可以使用Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS配置在特定于拓扑的基础上配置此超时,默认为30秒