This repository has been archived by the owner on Jun 16, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
scale_out_in_cn
Cody edited this page Apr 8, 2016
·
2 revisions
从Release 0.9.7开始,JStorm可以支持topology任务的动态调整(支持扩容和缩容,以及同时的扩容和缩容),动态调整的过程中 topology任务不会被重启或者下线,保证服务的持续性。在系统高负载和低负载时都能够有效的利用机器资源。 动态调整包括Task和Worker两个维度。
- Task维度: Spout, Bolt,Acker并发数的动态调整
- Worker维度: Worker数的动态调整
Note: 动态伸缩当前仅对shuffer grouping有效(Shuffer, Localfirst, LocalOrShuffer)
JStorm rebalance
USAGE: jstorm rebalance [-r] TopologyName [DelayTime] [NewConfig]
e.g. jstorm rebalance SequenceTest conf.yaml
参数说明:
-r: 对所有task做重新调度
TopologyName: Topology任务的名字
DelayTime: 开始执行动态调整的延迟时间
NewConfig: Spout, Bolt, Acker, Worker的新配置(当前仅支持yaml格式的配置文件)
配置文件例子
topology.workers: 4
topology.acker.executors: 4
topology.spout.parallelism:
SequenceSpout : 2
topology.bolt.parallelism:
Total : 8
backtype.storm.command.rebalance:
- public static void submitRebalance(String topologyName, RebalanceOptions options)
- public static void submitRebalance(String topologyName, RebalanceOptions options, Map conf)
Note: conf里带上zk信息,可以用来做对一个集群的远程提交
JStorm提供了task和worker维度一些系统监控负载情况查询的API。 用户可以通过这些API去判断当前任务的负载情况,由此去判断是否要对任务相关的component进行扩容或者缩容。当前提供的具体监控信息查询API如下
backtype.storm.metric.TopologyMetrics
Task:
- 反序列队列负载: public static Map<Integer, Double> getTaskDeserializeQueueStatus(String topologyName, Map stormConf)
- 执行队列负载: public static Map<Integer, Double> getTaskExecuteQueueStatus(String topologyName, Map stormConf)
- 序列化队列负载: Map<Integer, Double> getTaskSerializeQueueStatus(String topologyName, Map stormConf)
Worker:
- CPU利用率: public static Map<Integer, Double> getWorkerCpu(String topologyName, Map stormConf)
- Memory使用量: public static Map<Integer, Double> getWorkerMemory(String topologyName, Map stormConf)
JStorm集群扩容时,可以对任务进行扩容,新的task会被分配在新的机器上。
为了保证服务不中断,默认情况下,在扩容时会保证当前task, worker调度结果的不变。所以如果新的worker资源和task的扩容数,在和当前系统调度结果不匹配的情况下,会出现集群资源使用不均衡的问题。 比如:
worker-1: task-1, task-2, task-3
rebalance with newConf: workerNum=4, taskNum=4
= > worker-1: task-1, task-2, task-3
worker-2: task-4
在多次扩容后,如果出现了以上集群调度不均衡的情况。可用通过加参数"-r"去强制对所有的task做一次默认的均匀调度。
e.g. jstorm rebalance -r SequenceTest