在风暴集群中的每台机器上严格分配一个特殊螺栓

时间:2014-11-02 13:52:39

标签: java apache-storm

我想在群集中的每台机器上启动特殊螺栓。

Storm有可插拔的调度程序,但文档很少。来自xumingming只有一个可理解的example。如何使用IScheduler实现此模式?

示例

我们有TCPBolt,它侦听端口8765. TCPBolt parallelism ==群集大小。我们需要在每台机器上启动此螺栓的一个实例。

1 个答案:

答案 0 :(得分:0)

示例和源代码提供了足够的演示代码来执行此操作。

首先,您需要将TCPBolt的任务编号设置为您的cluser的主机编号。

然后在您的IScheduler impl中,使用private Map<String, SchedulerAssignmentImpl> assignments;中的数据检查TCPBolt是否已分配给主机(在SchedulerAssignmentImpl中,使用数据Map<ExecutorDetails, WorkerSlot> executorToSlot;

最后,如果未分配,请使用以下代码分配

// re-get the aviableSlots
availableSlots = cluster.getAvailableSlots(specialSupervisor);
 
// since it is just a demo, to keep things simple, we assign all the
// executors into one slot.
cluster.assign(availableSlots.get(0), topology.getId(), executors);

这只是一个粗略的想法。希望它有所帮助。