Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache storm 将元组发送到不同的螺栓_Apache Storm - Fatal编程技术网

Apache storm 将元组发送到不同的螺栓

Apache storm 将元组发送到不同的螺栓,apache-storm,Apache Storm,我正在尝试一个场景,在这个场景中,我有一个喷口,它从消息代理读取数据,并将消息作为元组发送到一个螺栓进行一些处理 螺栓后处理将其转换为单独的消息,每个子消息必须发送到不同的代理,这些代理可以托管在不同的机器上 假设我有有限的收件人(在我的例子中,有3个消息代理用于输出) 因此,Bolt1后处理可以直接将消息丢弃到这3个消息代理 现在,如果我在这里使用一个螺栓,它会自动将消息发送到这三个代理,并假设其中一个代理失败(由于不可用等原因),我将调用收集器的fail方法 一旦螺栓上调用了fail方法,在

我正在尝试一个场景,在这个场景中,我有一个喷口,它从消息代理读取数据,并将消息作为元组发送到一个螺栓进行一些处理

螺栓后处理将其转换为单独的消息,每个子消息必须发送到不同的代理,这些代理可以托管在不同的机器上

假设我有有限的收件人(在我的例子中,有3个消息代理用于输出)

因此,Bolt1后处理可以直接将消息丢弃到这3个消息代理

现在,如果我在这里使用一个螺栓,它会自动将消息发送到这三个代理,并假设其中一个代理失败(由于不可用等原因),我将调用收集器的fail方法

一旦螺栓上调用了fail方法,在我的喷口中就会调用fail方法

在这里,我相信我必须再次处理整个消息(我必须确保必须处理每个消息),即使三分之二的消息成功传递

或者,即使我将这3个子消息发送到不同的bolt,我认为即使在这种情况下,Spout也必须再次处理整个消息

这是因为我在第一次使用spoot nextTuple()方法发出消息时,在消息中附加了一个唯一的Guid

是否有办法确保只处理失败的子消息,而不处理整个消息

感谢Storm(低级Java API)仅提供“至少一次”处理保证,即不支持在出现故障时避免重复处理

若你们只需要继续一次,你们可以在暴风雨中使用三叉戟。但是,如果向外部系统发送数据(如果外部系统无法检测和删除重复数据),则即使是Trident也无法准确发送一次。这不是一个特定于风暴的问题,而是一个普遍的问题。其他系统,如ApacheFlink、ApacheSparkStreaming或S-Store(麻省理工学院->Stonebraker最近的一个研究原型系统)“遭受”完全相同的问题

也许最好的方法是试用Trident,以评估它是否能满足您的要求