在storm bolt中:如何在一个bolt任务

时间:2016-11-11 06:37:41

标签: apache-storm

我有一个带有喷口和螺栓的风暴拓扑(numTasks = 16)。我想只在一个螺栓的任务中执行一段特定的代码(只有一次)。 我怎样才能做到这一点?

我想在螺栓的准备方法中这样做,但我不知道预先分配给螺栓的任务ID。

是否可以进行选举并在其中存储zookeeper,稍后在bolt的prepare方法中检索选举领导并与当前任务ID匹配。如果任务ID与选举领导者匹配,则在该螺栓任务实例中执行该特定代码段?如果这是一种合适的方法,我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您可以通过(?s).*refId=(.*?)& 作为参数TopologyContext访问包含所有元信息的整个拓扑DAG。在那里,您可以获得所有任务ID,包括您自己的任务ID。

因此,如果您的任务已分配最小(或最大)任务ID,则一种简单的方法是仅运行您的特殊代码。