在生产集群运行拓扑
在生产集群运行拓扑和在本地模式运行拓扑是相似的,下面是步骤:
1) 定义拓扑(如果使用java语言定义,则使用TopologyBuilder类)。
2) 使用StormSubmitter提交拓扑到集群。StormSubmitter需要以下输入参数:拓扑名称、拓扑配置、拓扑自身。例如:
   
   
   
   
  1. Config conf = new Config(); 
  2. conf.setNumWorkers(20); 
  3. conf.setMaxSpoutPending(5000); 
  4. StormSubmitter.submitTopology("mytopology", conf, topology); 
3) 打包你的代码及依赖包到一个jar文件(除了storm本身相关的jar)。
如果你使用maven,可以使用Maven Assembly Plugin帮你打包代码。只需在pom.xml文件添加这些代码:
    
    
    
    
  1. <plugin> 
  2.   <artifactId>maven-assembly-pluginartifactId> 
  3.   <configuration> 
  4.     <descriptorRefs>   
  5.       <descriptorRef>jar-with-dependenciesdescriptorRef> 
  6.     descriptorRefs> 
  7.     <archive> 
  8.       <manifest> 
  9.         <mainClass>com.path.to.main.ClassmainClass> 
  10.       manifest> 
  11.     archive> 
  12.   configuration> 
  13. plugin> 
运行mvn assembly:assembly命令得到一个打包好的jar文件。确信排除了storm本身的相关jar文件。
4) 提交拓扑到集群,命令如下所示:
     
     
     
     
  1. storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3 
storm jar命令将提交指定的jar包到集群,配置StormSubmitter类与正确的集群通讯。在这个例子中,上传jar文件后,以arg1、arg2、arg3为入参调用org.me.MyTopology的main方法。
如何配置你的storm客户端与集群通讯,请参见 安装开发环境。
 
常见配置
这里有许多关于拓扑的配置项,全部配置项清单参见 这里。带“TOPOLOGY”前缀的配置项可以在具体的拓扑上进行设置来覆写全局配置(另外一些配置项是集群配置,且不能被覆写)。这里有一些常见的拓扑配置项:
1. Config. TOPOLOGY_WORKERS:这个设置用于执行拓扑的worker进程数量。例如,你设置为25,在集群内将有25个java进程执行所有任务。如果拓扑所有组件的并行数为150,每个worker进程将有6个任务以线程方式运行。
2. Config.TOPOLOGY_ACKERS:这个设置用于跟踪元组树和检测spout元组何时被完全处理的任务数量。Acker是storm可靠性模型不可分割的一部分。关于可靠性方面的更多信息,请参见 Guaranteeing message 。
3. Config.TOPOLOGY_MAX_SPOUT_PENDING:这个设置用于pending状态spout元组的最大数量,在一个spout任务中能立刻挂起一个spout元组(pending的意思是元组还未acked或failed)。强烈建议你设置这个配置,防止队列爆掉。
4. Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS:spout元组失败之前必须被完全处理的最大时间。默认值为30秒,大多数拓扑是足够的。有关Storm可靠性模型如何工作的更多信息,请参见 Guaranteeing message processing。
5. Config.TOPOLOGY_SERIALIZATIONS:使用该配置可以在storm注册多个序列化方式以便你在元组中使用自定义类型的数据。
 
Kill拓扑
Kill一个拓扑,只需要运行如下命令:
     
     
     
     
  1. storm kill {拓扑名} 
为storm kill命令指定一个拓扑名,该拓扑名与提交拓扑到集群时使用的拓扑名相同。
Storm不会直接kill拓扑。相反,它使所有spout退出工作以便它们不发射元组,然后storm等待Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS秒后销毁所有worker,当拓扑被kill时,这给了拓扑充足时间完成任何一个它正在处理的元组。
 
更新运行中拓扑
为更新一个运行中的拓扑,目前只能先kill当前拓扑,然后重新提交一个新的拓扑。计划实现一个新特性-storm swap命令,用新拓扑交换正在运行中的拓扑,确保最小的停机时间和两个拓扑不会同时处理元组。
 
监控拓扑
监控拓扑最好的地方是使用storm ui。Storm ui提供任务发生的错误信息、细粒的吞吐量、及每个运行中拓扑的每个组件的延迟情况。
 
你也可以去查看集群机器上worker的日志文件。
 
 
原文: https://github.com/nathanmarz/storm/wiki/Running-topologies-on-a-production-cluster