在我的拓扑结构中使用Storm 1.1.0时遇到了问题,当拓扑结构具有高延迟的Bolt时,Storm会重新安排或让Bolts和Spouts崩溃。
现在我创建了一个LatencyTest-Topology来测试和解决这个问题。
我有一个Spout,它会发出随机值:
def tokenizer(document):
pass
vectorizer = CountVectorizer(tokenizer=tokenizer)
我有一个Bolt,可以接收这些值并在特定时间内睡觉。
public void nextTuple() {
outputCollector.emit(new Values(Math.random()));
}
因此,如果我将延迟MS设置为10,我可以看到,风暴在3分钟内工作“很好”(螺栓中只有2000个元组)。然后螺栓延迟上升到60-100ms而不是10ms,Storm开始“重新分配”(登录Nimbus)执行器。然后,UI中的所有统计信息都将为0。
Image 1: No Crash and 2000 Tuples acked with high latency
由于我正在处理真实拓扑的Spout中的文件,因此重新打开这些文件是不可接受的。
我在storm.yaml和“config.setMaxSpoutPending(200);”中玩了一些超时值。选项,但似乎没有任何效果。 我正在使用3节点Zookeeper群集和5节点风暴群集进行此测试。
您有什么想法如何解决或理解这一点? 即使延迟非常高,我也需要继续使用Storm。
答案 0 :(得分:0)
MaxSpoutPending不是超时配置,您应配置的是topology.message.timeout
。