问题场景
topo里面有多个bolt 任务,配了3个work,但是不管流量怎么变,就是只到一个work上,比如machineA. 3个wokr 分布在不同机器。
顺着整个topo 网上看,上一个任务,基本也是再A上跑,也就是dependency的任务都是再A上,没有下发到其他机器。
shuffle的问题
默认使用了,shufflegrouping的策略。文档里是说保重均匀分发,但是也有人遇到了相同的情况,就是倾向于先local 然后再随机shufflegroup。
也就是说,我下发数据到下游任务的时候,就看下游任务再我本机上是否有work,如果有,就都给他了。local 的优先级,大于均衡的优先级,所有造成了任务都给到A。
解决的方法
因为我们上游只设置了一个spout, 所以就只往一个机器上发。我们增大spout的个数,然后能部分解决。
做保险的做法,修改 shuffle策略,强制往不同机器发。
其他优化的参数
https://blog.csdn.net/it_freshman/article/details/113111268
比如topology.buffer.spout.pending,这个值,对机器性能有较大的影响。
网友评论