Apache Strom学习笔记三:在storm集群上运行拓扑

来源:互联网 发布:westlife知乎 编辑:程序博客网 时间:2024/05/22 02:25

在生产集群上运行拓扑和在本地模式下运行一样简单。有一下几个步骤:

  1. 定义拓扑(如果用java开发的话使用Topology
  2. 使用StormSubmitter 向集群提交拓扑。StormSubmitter接受拓扑名称、拓扑配置信息以及拓扑对象本身作为参数,例如:
Config conf = new Config();conf.setNumWorkers(20);conf.setMaxSpoutPending(5000);StormSubmitter.submitTopology("mytopology", conf, topology);
  1. 将你的代码以及你代码的所有依赖打成一个jar包(除了storm的包,因为storm的包已经被添加到worker节点的类路径下了)。
    如果你使用maven,Maven Assembly Plugin能够为你打包,仅需要在pom.xml中添加如下代码:
 <plugin>    <artifactId>maven-assembly-plugin</artifactId>    <configuration>      <descriptorRefs>          <descriptorRef>jar-with-dependencies</descriptorRef>      </descriptorRefs>      <archive>        <manifest>          <mainClass>com.path.to.main.Class</mainClass>        </manifest>      </archive>    </configuration>  </plugin>

运行mvn assembly:assembly来打包。确保你排除了storm得jar包因为它在集群的类路径下已经存在了。
4. 使用storm客户端来提交拓扑到集群,指定你的jar包路径,主函数的类名称和其他的一些参数,如下:

storm jar path/to/allmycode.jar org.me.MyTopology arg1 arg2 arg3

storm jar会将jar包提交到集群,同时配置StormSubmitter类来与正确的集群建立连接。在上面的例子中,上传jar包之后,storm jar就会使用‘arg1’、‘arg2’、‘arg3’三个参数来运行org.me.MyTopology的main函数。

常用配置
拓扑中有很多参数可以设置。你可以在这里找到完整的配置项。以”TOPOLOGY“开头的参数可以被拓扑中的对应配置项覆盖(其他参数是集群的配置参数,不能被直接覆盖)。以下是拓扑中的一些常用配置:

  1. Config.TOPOLOGY_WORKERS:此项用来设置执行拓扑的worker进程数。例如,如果你设置为25,集群将会有25个java进程来执行所有的任务。如果你的拓扑并行度设置为150,那么每个worker进程就会执行6个任务线程。
  2. Config.TOPOLOGY_ACKER_EXECUTORS:此项用来设置跟踪元组树和侦查spout元组是否被完全处理的执行器的数量。Acker是storm可靠性模块的必要部分。不设置此变量或者设置为null,strom将acker执行者的数量设置成和此拓扑配置的worker的数量相等。如果这个变量设置为0,storm将会在元组刚离开spout就立即返回,实际上可靠性将无效。
  3. Config.TOPOLOGY_MAX_SPOUT_PENDING: 此项用来设置一个单个spout任务同时可以pending的元组数量。(pending是指元组还没有被ack或者fail),强烈建议你设置此项防止队列激增。
  4. Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS:此项用来设置spout元组被标记为失败的最大等待时间,这个值默认为30秒,对于大多数拓扑来说这个值是足够的。
  5. Config.TOPOLOGY_SERIALIZATIONS:此项用来为给storm注册更多的序列器,可以实现用自定义的类型处理元组。

杀死一个拓扑
执行一下语句,可以杀死一个拓扑

storm kill {stormname}

stormname就是提交元组时候的名称。
Storm在执行该命令后不会立即杀死该拓扑。Storm会先停止所有的spout活动,使得不能继续发送元组,然后Storm会等待Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS所配置的时间,然后才会结束所有的worker进程。这就可以保证拓扑在杀死之前可以有足够的时间完成已收到的元组处理。

更新运行中的拓扑
去更新一个正在运行的拓扑,当前仅有选项就是先杀掉拓扑然后提交一个新的。一个计划的功能就是实现通过storm swap命令替换正在运行的拓扑,确保最小的停机时间,并且保证同一时间两个拓扑不会同时处理元组。

监控拓扑
监控拓扑最好的方式就是使用Storm UI。Storm UI可以显示任务中的错误信息以及每个运行拓扑中每个组件的吞吐量与端对端延时的性能信息。

你也可以通过查看集群机器上的worker的日志来监控拓扑。