Stream 风暴流喷口处理中的下一步方法问题

Stream 风暴流喷口处理中的下一步方法问题,stream,apache-storm,Stream,Apache Storm,我正在Storm上开发一些数据分析算法,对Storm的内部设计有一些疑问。我想在Storm中模拟传感器数据的生成和处理,因此我使用Spout通过在nextTuple method of Spout中设置睡眠方法,以固定的时间间隔将传感器数据推送到后续螺栓中。但从实验结果来看,喷口似乎没有按规定的速率推送数据。在实验中,系统中没有瓶颈螺栓 然后我检查了一些关于ack和NEXTTUPPLE Storm方法的资料。现在我的疑问是,是否只有当前面的元组在ack方法中被完全处理和确认时,才调用nextTu

我正在Storm上开发一些数据分析算法,对Storm的内部设计有一些疑问。我想在Storm中模拟传感器数据的生成和处理,因此我使用Spout通过在nextTuple method of Spout中设置睡眠方法,以固定的时间间隔将传感器数据推送到后续螺栓中。但从实验结果来看,喷口似乎没有按规定的速率推送数据。在实验中,系统中没有瓶颈螺栓

然后我检查了一些关于ack和NEXTTUPPLE Storm方法的资料。现在我的疑问是,是否只有当前面的元组在ack方法中被完全处理和确认时,才调用nextTuple方法

如果这是真的,是否意味着我不能设置一个固定的时间间隔来发送数据


太多了

我的经验是,您不应该期望Storm做出任何实时保证,包括在您的情况下元组处理的速率。当然,您可以编写一个只在某个时间日程表上发出元组的喷口,但Storm不能保证它总是按您所希望的频率调用喷口


请注意,只要拓扑中有空间容纳更多挂起的元组,就应该调用nextTuple。如果拓扑有空闲容量,我希望Storm会尽其所能填满它。

我有一个类似的用例,我实现它的方法是使用
勾选元组

Config tickConfig = new Config();                                       
tickConfig.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 15);
...
...
builder.setBolt("storage_bolt", new S3Bolt(), 4).fieldsGrouping("shuffle_bolt", new Fields("hash")).addConfigurations(tickConfig);
然后在我的
storage\u bolt
(注意它是用
python
编写的,但您会知道)我检查消息是否为
tick\u tuple
,如果是,然后执行我的代码:

def process(self, tup): 
    if tup.stream == '__tick':                                              
        # Your logic that need to be executed every 15 seconds,
        # or what ever you specified in tickConfig.
        # NOTE: the maximum time is 600 s.                                            
        storm.ack(tup)                                                      
        return  

我喜欢这个问题,但如果你能在storm用户邮件列表上问这个问题,可能会更幸运。然而,我看到我的答案下面的一些信息,我可以给你。