如何在单Nimbus上部署适配不同硬件的两类Storm拓扑?
解决Storm拓扑与Supervisor硬件资源分配的问题
我完全懂你的顾虑——想让资源吃紧的按需拓扑稳稳用上高性能硬件,同时保证7×24小时运行的常规拓扑不抢占资源,但默认的Storm分配机制确实没那么智能。其实Storm提供了几种靠谱的方式来控制拓扑和Supervisor的绑定关系,下面给你拆解一下:
给Supervisor打专属标签(Slot Tagging)
这是最直接的隔离方案,相当于给高性能硬件的Supervisor贴上"专属车位"的标签,只有按需拓扑能停进来。
操作步骤:- 修改高性能节点的
storm.yaml配置,添加标签:# 假设该节点有3个可用slot supervisor.slots.ports: [6700, 6701, 6702] # 自定义高性能标签 supervisor.slot.tag: "high-spec-node" - 提交按需拓扑时,指定只使用带这个标签的slot:
Config conf = new Config(); conf.put(Config.TOPOLOGY_SLOT_REQUIREMENTS, Collections.singletonMap("supervisor.slot.tag", "high-spec-node")); StormSubmitter.submitTopology("on-demand-bigdata-topo", conf, topology);
常规拓扑如果不指定标签,就只会分配到普通硬件的Supervisor上,彻底实现资源隔离。
- 修改高性能节点的
通过资源优先级间接控制
如果暂时没法给硬件打标签,也可以通过资源配置和优先级来引导分配:- 给常规拓扑设置较低的资源请求,让它"适配"普通硬件:
topology.component.resources.onheap.memory.mb: 256 topology.component.cpu.pcore.percent: 0.2 - 给按需拓扑设置更高的资源请求+高优先级,让高性能节点优先分配它:
# 数值越大优先级越高,默认是0 topology.priority: 10 topology.component.resources.onheap.memory.mb: 1024 topology.component.cpu.pcore.percent: 1.0
这样高性能Supervisor会优先满足资源需求高、优先级高的按需拓扑,常规拓扑只能占用剩余的普通资源。
- 给常规拓扑设置较低的资源请求,让它"适配"普通硬件:
极端场景:单独集群部署
如果高性能硬件和普通硬件差异极大,或者业务隔离要求极高,干脆把按需拓扑部署在独立的Storm集群里。虽然运维成本会高一点,但能做到100%的资源隔离,完全不用担心互相影响。
其中Slot Tagging是最优解,它从机制上绑定了拓扑和特定硬件,不会出现资源抢占的模糊地带。配置后记得重启高性能节点的Supervisor服务,让标签生效。
内容的提问来源于stack exchange,提问作者Meny Issakov
相关产品推荐
相关产品推荐

