我正在研究Apache Storm。我阅读了源代码&&开发人员文档&& JavaDoc&&关于Storm的其他有用的博客。
一个问题让我很困惑。大多数文档和博客都表示,当Storm Cluster为Workers分配拓扑时,不同的调度程序会导致不同的分配方式。但我感到困惑的是,策略在包中的作用是什么" org.apache.storm.scheduler.resource.strategies.XXX"诸如DefaultResourceAwareStrategy和Storm分配拓扑时的其他两种策略?
在Storm示例程序中,我记得在方法setTopologyStrategy()中应用的这些策略,用于在创建拓扑时选择策略。那么,在ResourceAwareSchedule等Scheduler和任务赋值中的DefaultResourceAwareStrategy之类的策略之间有什么不同呢?哪一个是决定任务分配的真正因素?
我在谷歌上搜索过这个问题,但没有一个非常明确的答案。我希望我能尽可能明确地回复解释调度程序和策略的区别。非常感谢。
答案 0 :(得分:1)
如你所知,Storm有一些不同的调度程序。他们中的一些人没有考虑到主管节点的资源。 ResourceAwareScheduler是一个调度程序实现,可以在决定分配拓扑的位置时考虑主管资源/负载。
为了使ResourceAwareScheduler具有灵活性,它使用策略来确定如何对不同的主管进行排名。 ResourceAwareScheduler包含资源感知所需的公共代码,而策略执行实际调度。如果有意义的话,ResourceAwareScheduler使用策略来进行调度。
查看https://github.com/apache/storm/blob/master/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/DefaultResourceAwareStrategy.java#L108以及GenericResourceAwareStrategy中的相应行。那里的评论解释了不同策略的作用。