Apache Storm Isolation Scheduler能否实现拓扑节点动态分配?
Storm Isolation Scheduler 动态资源调度需求实现方案
可以实现你的需求,以下是两种可行的实现方式:
方式一:基于脚本+原生命令的动态调整
默认的Isolation Scheduler是静态绑定节点资源的,但可以通过外部监控脚本配合Storm原生命令实现动态分配:
- 监控Topology-Test2的运行状态或流量指标(比如通过
storm list命令判断拓扑是否运行,或采集业务流量数据) - 当检测到Topology-Test2无任务时:
- 停止Topology-Test2:
storm kill Topology-Test2 - 修改
isolation.scheduler.machines配置为:isolation.scheduler.machines: "Topology-Test1": 5 - 重启Nimbus服务,让Topology-Test1占用全部5个节点
- 停止Topology-Test2:
- 当检测到Topology-Test2需要启动时:
- 修改
isolation.scheduler.machines配置回初始分配:isolation.scheduler.machines: "Topology-Test1": 2 "Topology-Test2": 3 - 重启Nimbus服务
- 启动Topology-Test2:
storm jar your-topology.jar com.yourcompany.TopologyTest2
- 修改
方式二:自定义扩展Isolation Scheduler
如果需要完全自动化的动态调度,无需手动修改配置和重启服务,可以通过扩展Storm的Isolation Scheduler实现:
- 继承Storm原生的
IsolationScheduler类,重写资源分配的核心逻辑 - 在自定义逻辑中加入拓扑状态/流量的判断逻辑:
- 当Topology-Test2未运行或无流量时,将其预留的3个节点划归Topology-Test1使用
- 当Topology-Test2有流量进入需要运行时,自动收回节点并分配给该拓扑
- 将自定义Scheduler打包成jar包,修改Storm配置指定使用该自定义Scheduler:
nimbus.scheduler: com.yourcompany.CustomIsolationScheduler
两种方式各有适用场景:方式一适合小型集群或简单需求,无需开发;方式二适合复杂的自动化调度场景,需要一定的开发工作量。
内容的提问来源于stack exchange,提问作者Anil Juneja
相关产品推荐
相关产品推荐

