Stream 风暴流喷口处理中的下一步方法问题
我正在Storm上开发一些数据分析算法,对Storm的内部设计有一些疑问。我想在Storm中模拟传感器数据的生成和处理,因此我使用Spout通过在nextTuple method of Spout中设置睡眠方法,以固定的时间间隔将传感器数据推送到后续螺栓中。但从实验结果来看,喷口似乎没有按规定的速率推送数据。在实验中,系统中没有瓶颈螺栓 然后我检查了一些关于ack和NEXTTUPPLE Storm方法的资料。现在我的疑问是,是否只有当前面的元组在ack方法中被完全处理和确认时,才调用nextTuple方法 如果这是真的,是否意味着我不能设置一个固定的时间间隔来发送数据Stream 风暴流喷口处理中的下一步方法问题,stream,apache-storm,Stream,Apache Storm,我正在Storm上开发一些数据分析算法,对Storm的内部设计有一些疑问。我想在Storm中模拟传感器数据的生成和处理,因此我使用Spout通过在nextTuple method of Spout中设置睡眠方法,以固定的时间间隔将传感器数据推送到后续螺栓中。但从实验结果来看,喷口似乎没有按规定的速率推送数据。在实验中,系统中没有瓶颈螺栓 然后我检查了一些关于ack和NEXTTUPPLE Storm方法的资料。现在我的疑问是,是否只有当前面的元组在ack方法中被完全处理和确认时,才调用nextTu
太多了 我的经验是,您不应该期望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用户邮件列表上问这个问题,可能会更幸运。然而,我看到我的答案下面的一些信息,我可以给你。