Apache Storm - Spout / Bolt以高延迟崩溃

时间:2017-08-18 10:12:53

标签: java apache-zookeeper apache-storm latency

在我的拓扑结构中使用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。

documentation

Image 1: No Crash and 2000 Tuples acked with high latency

由于我正在处理真实拓扑的Spout中的文件,因此重新打开这些文件是不可接受的。

我在storm.yaml和“config.setMaxSpoutPending(200);”中玩了一些超时值。选项,但似乎没有任何效果。 我正在使用3节点Zookeeper群集和5节点风暴群集进行此测试。

您有什么想法如何解决或理解这一点? 即使延迟非常高,我也需要继续使用Storm。

1 个答案:

答案 0 :(得分:0)

MaxSpoutPending不是超时配置,您应配置的是topology.message.timeout