今天博主搭建了一个Storm 集群。
我配置的Storm 基于 zookeeper:
由于 Storm群 与 Zookeeper 群 不在同一个位置,群与群之间 有 墙, 这时候就需要将 Storm 的群开放给 Zookeeper 群
主要涉及到了两个端口
1.zookeeper 服务端口
2. 在storm.yaml 中 编辑 nimbus.thrift.port
storm 的群有出入口规则校验
1.
zookeeper :
我开放了 zookeeper 群 的 服务端口 2181
2.
storm nimbus.thrift.port
该参数的意义:
1.1 Prepare
Nimbus启动时候,运行了一个Thrift Server。它会在topology提交之前做以下四个工作。
(1) 清理一些中断了的topology(nimbus目录下/storm.local.dir/stormdist下存在,zk中 storms/topologyid中不存在的topology): 删除ZK上相关信息(清理tasks/topologyid; storms/topologyid; assignments/topologyid这个三个目录)。
(2) 将storms/下所有的topology设置为启动状态: 能转换成startup状态的两种状态分别是:killed和rebalancing。nimbus的状态转换是很有意思的事情,killed状态的topology在nimbus启动的时候会被干掉;rebalancing状态的topology在nimbus启动的时候会重新分发任务,状态会变成rebalancing的上一个状态。
举例: 当某个topology提交的时候,会被设置成active状态,假设storm集群增加机器了,你希望重新分发任务,可以将状态转换成rebalance状态,转换成这个状态要做这几件事:
首先,启动一个延迟TOPOLOGY-MESSAGE-TIMEOUT-SECS秒执行的事件,将当前状态转换成do-rebalance状态,在这之前会将当前topology的状态设置成rebalancing状态(注意设置和转换的区别,设置就是指将ZK上存储的topology的状态进行重新设置)。
然后,将rebalancing的状态转换成do-rebalance, 也就是将任务重新分发。
最后将状态设置成rebalancing的上一个状态active。
(3) 每间隔NIMBUS-MONITOR-FREQ-SECS长时间将ZK上/storms 下所有的topology状态转换成monitor状态,并且将不活跃的storm清理掉。只有当状态为active和inactive的时候,才能转换成monitor状态,转换成该状态就是将任务重新分发,监控是否与上一次的分配情况不同,如果存在不同,则替换,这个过程ZK上存储的topology的状态是不会被设置的。
(4) 删除过期的jar包: 过期时间为NIMBUS-INBOX-JAR-EXPIRATION-SECS。每间隔NIMBUS-CLEANUP-INBOX-FREQ-SECS长时间进行一次清理。