在Apache Storm中声明拓扑时,是否有方法控制每台机器使用多少示例?
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("myspout", new MyDoSomethingOnTheHost(), 5);
在示例和API文档中,限制似乎只是每个拓扑的计数,但对于我想要的情况,我想确保spouts在每个主机上执行一个任务,并且每个主机都是精确的。
据我所知,即使在上面的例子中有5台机器,似乎也没有办法控制每台机器启动多少个spout,在最坏的情况下,所有5个spout都将在一台主机上执行。
1条答案
按热度按时间du7egjpx1#
据我所知,Apache Storm本身就使用循环调度的放置方案。因此,如果你只有这5个喷口和5个主机,它应该能按需工作。然而,由于您可能会有更多的螺栓,事情变得更加复杂,因为目前还不清楚Storm内部如何构建其分发螺栓和喷口的列表。您可以做的第一件简单的事情是尝试查看它如何分配操作符。
此外,如果你真的想确保你想要的Map,Storm提供(与Flink相反)通过实现
IScheduler
接口来实现自己的调度器。在这里,您可以构建关于如何分发运算符的自定义逻辑。