如何识别如果所有的发射都到达了螺栓?

时间:2015-07-31 19:14:05

标签: java apache-kafka apache-storm

我有一个kafka鲸鱼说法 KafkaSpout ,它从kafka主题中读取消息说 msg ,然后发出一个螺栓说 Bolt1 Bolt1 将此消息拆分为多条消息 msg1 msg2 ,.., msgN 并向其他发送消息说 Bolt2 即可。现在,一旦 Bolt1 的所有消息 msg1 msg2 ,.., msgN 被发送到 Bolt2 ,我需要对 msg 进行一些处理。有没有办法确定如果所有拆分消息都达到 Bolt2

1 个答案:

答案 0 :(得分:1)

通过Apache Storm'} Guaranteeing Message Processing文档页面,它会讨论如果正确发出,将生成一个元组树,如果消息丢失,Storm将从Spout重放。

这通过Storm调用锚定机制发生,比如你有以下执行方法。

public void execute(Tuple tuple) {
    String sentence = tuple.getString(0);
    for(String word: sentence.split(" ")) {
        _collector.emit(tuple, new Values(word)); //anchoring happening
    }
    _collector.ack(tuple);
}
  

通过将输入元组指定为第一个来锚定每个单词元组   发射的参数。由于单词元组被锚定,鲸鱼喷口元组在   如果单词元组,将在以后重播树的根   未能在下游处理。 link

如果您在不包含原始元组的情况下发出新单词,

_collector.emit(new Values(word)); //no anchoring
  

以这种方式发出单词元组会导致它无法锚定。如果   下游处理元组失败,根元组不会   重播。 link