# 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 內部實現
- 翻譯進度