我正在使用Apache STORM进行项目,并且我所使用的拓扑依次包括Spout,BoltA(2个执行器)和BoltB(1个执行器)。
Spout --> BoltA --> BoltB
我的理解是,Shuffle分组在螺栓任务之间平均分配了元组,但是我注意到,只有当所有任务都在同一工人上时,这才是正确的。如果有1个以上的工作程序,假设2个工作程序,并且每个工作程序承载一个具有相同螺栓的任务实例,则两个任务的负载均不相等。
使用我的拓扑-我完成一项任务的负载为90%,第二项任务的负载为0%。
为什么多个工人不一样。
如果您在Spout和BoltA之间建立了随机连接,则元组应该均匀分布。
正如Stig RohdeDøssing所提到的,您提到的行为与“本地或随机分组”(请参见Storm Concepts)匹配,这将优先将元组发送给本地工作进程中的任务。
因此,如果Spout的并行度为1,并且BoltA任务之一在同一工作进程中,则来自Spout的元组将优先路由到该本地下游任务。