代码改变世界

Twitter Storm 在生产集群运行拓扑

2012-03-07 13:20  cnchenlx  阅读(979)  评论(0)    收藏  举报

在生产集群运行拓扑

在生产集群运行拓扑和在本地模式运行拓扑是相似的,下面是步骤:

1) 定义拓扑(如果使用java语言定义,则使用TopologyBuilder类)。

2) 使用StormSubmitter提交拓扑到集群。StormSubmitter需要以下输入参数:拓扑名称、拓扑配置、拓扑自身。例如:

Config conf = new Config(); 
conf.setNumWorkers(20);
conf.setMaxSpoutPending(5000);
StormSubmitter.submitTopology("mytopology", conf, topology);

3) 打包你的代码及依赖包到一个jar文件(除了storm本身相关的jar)。

如果你使用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命令得到一个打包好的jar文件。确信排除了storm本身的相关jar文件。

4) 提交拓扑到集群,命令如下所示:

storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3

storm jar命令将提交指定的jar包到集群,配置StormSubmitter类与正确的集群通讯。在这个例子中,上传jar文件后,以arg1、arg2、arg3为入参调用org.me.MyTopology的main方法。

如何配置你的storm客户端与集群通讯,请参见安装开发环境

 

常见配置

这里有许多关于拓扑的配置项,全部配置项清单参见这里。带“TOPOLOGY”前缀的配置项可以在具体的拓扑上进行设置来覆写全局配置(另外一些配置项是集群配置,且不能被覆写)。这里有一些常见的拓扑配置项:

Config.TOPOLOGY_WORKERS:这个设置用于执行拓扑的worker进程数量。例如,你设置为25,在集群内将有25个java进程执行所有任务。如果拓扑所有组件的并行数为150,每个worker进程将有6个任务以线程方式运行。

Config.TOPOLOGY_ACKERS:这个设置用于跟踪元组树和检测spout元组何时被完全处理的任务数量。Acker是storm可靠性模型不可分割的一部分。关于可靠性方面的更多信息,请参见Guaranteeing message 

Config.TOPOLOGY_MAX_SPOUT_PENDING:这个设置用于pending状态spout元组的最大数量,在一个spout任务中能立刻挂起一个spout元组(pending的意思是元组还未acked或failed)。强烈建议你设置这个配置,防止队列爆掉。

Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS:spout元组失败之前必须被完全处理的最大时间。默认值为30秒,大多数拓扑是足够的。有关Storm可靠性模型如何工作的更多信息,请参见Guaranteeing message processing

Config.TOPOLOGY_SERIALIZATIONS:使用该配置可以在storm注册多个序列化方式以便你在元组中使用自定义类型的数据。

 

Kill拓扑

Kill一个拓扑,只需要运行如下命令:

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