storm上实现分配operator到指定slot的scheduler

motivation

在storm里,需要对多个不同的operator进行调度和资源分配。默认的调度器为EvenScheduler,也有一些其他的调度器如:Isolation Schduler, ResourceAwareScheduler,MultitenantScheduler等,具体参考官方文档。另外,简要介绍在这里。在我们的实验中,需要对网络功能进行一些测试和研究。因此希望能够实现slot和operator的绑定。而不是node和operator的绑定。在storm源码里没有这样的scheduler。github上,在这里有一个将指定operator分配到指定node的scheduler,基于linyiqun的工作,我们稍微进行了一些改进,实现了一个配operator到指定slot的scheduler –DirectToSlotScheduler,具体代码在这里

design



1. 根据用户指定的slot和operator的关系来分配资源。包括两个配置项:
- assigned_flag : 绑定到topology,若为1 ,则该topology使用DirectToSlotScheduler。否则使用EvenScheduler
- design_map: 绑定到topology,为一个map。key为operator名称,value为一个字符串–“host1:port1;host2:port2;…;hostN:portN”。slot之间用;分隔。
2. operator包含的多个executor会均匀的分布到指定的slot上。假如指定的slot数量大于executor数,则报错。
3. 对于系统默认的bolt,如__ack,则是随机分配slot。

test

测试用例