# Scheduler(调度器)
Storm 现在有 4 种内置的 schedulers(调度器): [DefaultScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/clj/org/apache/storm/scheduler/DefaultScheduler.clj), [IsolationScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/clj/org/apache/storm/scheduler/IsolationScheduler.clj), [MultitenantScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/jvm/org/apache/storm/scheduler/multitenant/MultitenantScheduler.java), [ResourceAwareScheduler](Resource_Aware_Scheduler_overview.html).
## Pluggable scheduler(可插拔的调度器)
你可以实现你自己的 scheduler(调度器)来替换掉默认的 scheduler(调度器),自定义分配executors 到 workers 的调度算法. 使用的时候,在storm.yaml 文件中将 "storm.scheduler" 配置属性设置成你的class类, 并且您的 scheduler(调度器)必须实现 [IScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/jvm/org/apache/storm/scheduler/IScheduler.java) 接口。
## Isolation Scheduler(隔离调度器)
solation scheduler(隔离调度器) 使得多个topologies(拓扑) 共享集群资源更加容易和安全. isolation scheduler(隔离调度器) 允许你指定某些 topologies(拓扑)是 “isolated”(隔离的), 这意味着这些 solated topologies(隔离的拓扑)运行在集群的特定机器上,这些机器没有其他 topologies(拓扑)运行。 isolated topologies(隔离的拓扑) 具有高优先级,所以如果和 non-isolated topologies(非隔离的拓扑)竞争资源,资源将会分配给 isolated topologies(隔离的拓扑), 如果必须给 isolated topologies(隔离的拓扑)分配资源,那么将会从 non-isolated topologies(非隔离的拓扑)中抽取资源。一旦所有 isolated topologies (隔离的拓扑)所需资源得到满足, 那么集群中剩下的机器将会被 non-isolated topologies(非隔离的拓扑)共享。
您可以通过将 "storm.scheduler" 设置为 "org.apache.storm.scheduler.IsolationScheduler" , 这样 Nimbus 节点的 Scheduler 就配置为 Isolation Scheduler(隔离调度器). 然后, 使用 "isolation.scheduler.machines" 配置来指定每个topology(拓扑) 分配多少台机器. 这个配置是从 topology name(拓扑名称)到分配给此 topology(拓扑)的隔离机器数量的 map 集合. 例如:
```
isolation.scheduler.machines:
"my-topology": 8
"tiny-topology": 1
"some-other-topology": 3
```
提交到集群中的topologies 如果没有出现在上述 map 集合中,那么将不会被 isolated 。 请注意:user不可以设置 isolation 属性,该配置只能通过集群的管理员分配(这是故意这样设计的)。
isolation scheduler(隔离调度器)通过在拓扑之间提供完全的隔离来解决多租户问题 - 避免 topologies(拓扑)之间的资源竞争问题. 最终的目的是 "productionized(生产黄精的)" topologies(拓扑)应该设置成 isolated , 测试或开发中的 topologies(拓扑)不应该设置成 isolated 属性. 集群上的剩余机器可以为 isolated topologies(隔离的拓扑)提供故障切换,也可以用来运行 non-isolated topologies(非隔离的拓扑).
- Storm 基础
- 概念
- Scheduler(调度器)
- Configuration
- Guaranteeing Message Processing
- 守护进程容错
- 命令行客户端
- Storm UI REST API
- 理解 Storm Topology 的 Parallelism(并行度)
- FAQ
- Layers on Top of Storm
- Storm Trident
- Trident 教程
- Trident API 综述
- Trident State
- Trident Spouts
- Trident RAS API
- Storm SQL
- Storm SQL 集成
- Storm SQL 示例
- Storm SQL 语言参考
- Storm SQL 内部实现
- Flux
- Storm 安装和部署
- 设置Storm集群
- 本地模式
- 疑难解答
- 在生产集群上运行 Topology
- Maven
- 安全地运行 Apache Storm
- CGroup Enforcement
- Pacemaker
- 资源感知调度器 (Resource Aware Scheduler)
- 用于分析 Storm 的各种内部行为的 Metrics
- Windows 用户指南
- Storm 中级
- 序列化
- 常见 Topology 模式
- Clojure DSL
- 使用没有jvm的语言编辑storm
- Distributed RPC
- Transactional Topologies
- Hooks
- Storm Metrics
- Storm 状态管理
- Windowing Support in Core Storm
- Joining Streams in Storm Core
- Storm Distributed Cache API
- Storm 调试
- 动态日志级别设置
- Storm Logs
- 动态员工分析
- 拓扑事件检查器
- Storm 与外部系统, 以及其它库的集成
- Storm Kafka Integration
- Storm Kafka 集成(0.10.x+)
- Storm HBase Integration
- Storm HDFS Integration
- Storm Hive 集成
- Storm Solr 集成
- Storm Cassandra 集成
- Storm JDBC 集成
- Storm JMS 集成
- Storm Redis 集成
- Azue Event Hubs 集成
- Storm Elasticsearch 集成
- Storm MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输) 集成
- Storm MongoDB 集成
- Storm OpenTSDB 集成
- Storm Kinesis 集成
- Storm Druid 集成
- Storm and Kestrel
- Container, Resource Management System Integration
- Storm 高级
- 针对 Storm 定义一个不是 JVM 的 DSL
- 多语言协议
- Storm 内部实现
- 翻译进度