如果一个螺栓无法识别从特定喷口流中消耗的元组,会发生什么?

时间:2016-11-02 14:48:54

标签: apache-kafka apache-storm kafka-consumer-api

假设我有一个spout将主题中的消息发送到两个流(stream1& stream2),两个bolt消耗来自这些流的消息(bolt1 - > stream1,bolt2 - > stream2)。现在如果bolt 2无法响应元组将消息仅重放到bolt 2?根据风暴中的新消费者API(apache-storm-1.0.2),实现了重试机制,其中如果numFail> maxRetry然后tuple被暴风雨吓到了。我怀疑这个消息是以这种方式被激活后会发生什么?它会从kafka队列中删除吗?如果是这样,我们将丢失一些失败的消息。有人可以告诉我一个元组的生命周期以及从kafka到storm的消息会发生什么,当它无法被激活时。

1 个答案:

答案 0 :(得分:1)

如果只有一个螺栓响应元组而不是第二个螺栓,则元组将重放到两个螺栓上。

此外,如果达到最大重试次数,Storm将不再尝试再次发送此消息并丢弃。但它不会被删除原始来源(在你的情况下它似乎是Kafka,因为首先不可能删除消息)。