Storm新增节点时字段分组处理逻辑及具体场景疑问
关于Storm新增节点与字段分组的疑问解答
嘿,作为Storm新手有这些疑问太正常啦,我来一步步给你拆解清楚:
1. 新增节点后,新节点是否会启动新的线程与任务?
这得看你有没有调整拓扑的并行度配置:
- 如果你通过
storm rebalance命令重新平衡拓扑,或者修改并行度后重新提交拓扑(比如增加worker进程数、executor线程数),Nimbus会把新的任务分配到新增节点上。这时候新节点会启动对应的worker进程,每个worker里会创建executor线程,这些线程会负责运行指定的task(任务)。 - 如果你只是单纯新增节点,但没调整拓扑的并行度配置,Nimbus不会自动把现有拓扑的任务分配到新节点上,新节点暂时不会运行这个拓扑的任何线程和任务。
2. 原本路由到任务X的Bob,新增节点后会不会被路由到新任务?
这核心取决于拓扑的task数量是否变化:
- 字段分组(fields grouping)是基于你指定字段的哈希值来计算路由的,映射规则是「哈希值 % task总数」。如果task总数没变化,哪怕新增了节点,哈希映射关系也不会变,Bob还是会被路由到任务X。
- 如果你调整了并行度,增加了task的数量,那么哈希映射的范围就变了,Bob的哈希值可能会匹配到新的task ID(如果新节点上有分配新task的话,就可能路由到新节点的新任务)。
3. 若Bob不会被路由到新任务,新节点是否仍会启动线程?
分两种情况:
- 如果你是通过
storm rebalance把现有executor线程迁移到新节点(比如只是增加worker数,没增加task数),新节点会启动worker进程和对应的executor线程,这些线程会运行原来的task(包括任务X)。这时候Bob还是路由到任务X,但任务X可能已经被迁移到新节点的executor上运行了。 - 如果你只是新增节点但没做任何拓扑调整,新节点不会启动这个拓扑的任何线程,相当于这个节点暂时闲置,不参与当前拓扑的运行。
内容的提问来源于stack exchange,提问作者Lander
相关产品推荐
相关产品推荐

