Storm入门教程

1. Storm基础

Storm

Storm主要特点

Storm基本概念

Storm调度器

Storm配置

Guaranteeing Message Processing(消息处理保障机制)

Daemon Fault Tolerance(守护线程容错机制)

理解Storm拓扑的并行

Tutorial

Local模式

本地模式的通用配置:

在生产环境中运行Topologies

通用配置

杀死topology

更新运行中的topology

监控topology



Local模式

本地模式模拟Storm集群用于测试和开发topologies。在本地模式运行topologies 类似于在集群中运行topologies 。

为了创建进程内的集群,可用LocalCluster类实现,如下:

import org.apache.storm.LocalCluster;
LocalCluster cluster = new LocalCluster();

你可以用LocalCluster 的submitTopology 方法提交topologies 。对于用StormSubmitter类中的方法,该类用于向Storm集群中提交topologies ,submitTopology 方法参数列表为topology名称,topology配置和topology对象,你可以用killTopology 方法根据Topology 的名称结束Topology ,如下所示:

cluster.shutdown();

本地模式的通用配置:

1.Config.TOPOLOGY_MAX_TASK_PARALLELISM:这个配置项是单个组件执行线程的最大值,生产环境中的topologies 并行度(成千上百个线程)较大导致负载过度,所以需要在本地模式中尽量测试。这个配置项允许你容易控制并行度。

2.Config.TOPOLOGY_DEBUG:当设置为true时,Storm将记录任一spout或bolt发送的tuple。这对于调试尤其有用。

在生产环境中运行Topologies

在生产集群中运行Topologies和本地模式一样,步骤如下:

1)定义topology(如果用Java那么用类TopologyBuilder来定义topology)

2)用类StormSubmitter 将topology提交到集群中。StormSubmitter 接受topology的名称、topology的配置和topology本身。如下:

Config conf = new Config();

conf.setNumWorkers(20);

conf.setMaxSpoutPending(5000);

StormSubmitter.submitTopology("mytopology", conf, topology);

3)将你的代码及其依赖打成jar包(除了Storm jars,因为所有的worker节点上已存在类路径上)

如果你用Maven,那么 Maven Assembly Plugin插件能为你打jar包。在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包。确认jar包中排除了Storm jars因为集群中的类路径上已经存在。

4)用storm 客户端程序提交topology 到集群,指定jar路径、运行的类以及参数,如下:

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

storm jar将提交jar到集群中并配置类StormSubmitter和集群通信。在本例中,在上述例子中上传了jar或会调用org.me.MyTopology类的主函数,参数列表为"arg1", "arg2", and "arg3".

通用配置

topology的配置项有很多,你可以在这里找到。前缀为“TOPOLOGY”的配置项可以被覆写(集群中的其他配置项不能被覆写)。下面是TOPOLOGY的常用配置:

1.Config.TOPOLOGY_WORKERS:改项设置了用于执行topology的worker进程数。例如,如果你设置为25,那么集群中将会有25个Java进程用于执行所有的任务。如果topology中所有的并行度为150,那么每个worker进程将有6个线程。

2.Config.TOPOLOGY_ACKER_EXECUTORS:该项配置了executors的数目,它用于跟踪元组树和监控spout元组已经被完全处理。Ackers 是Storm可靠性模型的一部分。如果没有设置该项或设置为空,Storm将设置acker executor和worker的数目相等。如果这个变量设置为0,Storm将立马响应元组只要他们从spout发送出来,不能保证可靠性。

3.Config.TOPOLOGY_MAX_SPOUT_PENDING:该项设置了单个spout 任务所能接受的元组数目(只要没有acked的元组或失败的都算)。强烈推荐你配置该项防止队列持续增大。

4.Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS:spout元组被认定失败的超时时间。该项默认是30s,对于大多数topologies是有效的。

5.Config.TOPOLOGY_SERIALIZATIONS:你可以给Storm注册更多的序列化器,这样你就可以自定义元组类型。

杀死topology

杀死topology,如下命令:

storm kill {stormname}

stormname和你提交时的topology保持一致。

Storm不会立即杀死topology。相反,它会使所有的spouts失效,这样它们不会发送更多的元组,然后等Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS 秒后杀死所有的workers,这允许topology有足够的时间处理正在执行的tuple。

更新运行中的topology

为了更新运行中的topology,当前唯一的选择是杀死当前的topology然后重新提交。一个计划中的特性是用storm swap命令切换运行中的topology为新的topology,确保最小的故障时间。

监控topology

监控topology最好用Storm UI。Storm UI提供了任务中的错误发生信息和关于每个组件的吞吐量和延迟性能的细粒度的状态。当然,你也可以看集群中worker的日志。

【原】Storm Local模式和生产环境中Topology运行配置的更多相关文章

  1. 生产环境中tomcat的配置

    生产环境中要以daemon方式运行tomcat 通常在开发环境中,我们使用$CATALINA_HOME/bin/startup.sh来启动tomcat, 使用$CATALINA_HOME/bin/sh ...

  2. 生产环境中CentOS7部署NET Core应用程序

    NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. ...

  3. 生产环境中 Ngx_lua 使用技巧和应用的范例

    生产环境中 Ngx_lua 使用技巧和应用的范例 时间 -- :: 51CTO技术博客 原文 http://rfyiamcool.blog.51cto.com/1030776/1252501 主题 L ...

  4. 理解Docker(6):若干企业生产环境中的容器网络方案

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  5. 生产环境中使用Docker Swarm的一些建议

    译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...

  6. Kubernetes 在生产环境中常用架构

    Kubernetes 在生产环境中常用架构 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下图所示 在该架构中,我们可以将其分为四层,如下: Client层:即Kuber ...

  7. Dubbo Mesh 在闲鱼生产环境中的落地实践

    本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是“借力开源.反哺开源” ...

  8. 明白生产环境中的jvm参数

    明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版 ...

  9. Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署

    一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...

随机推荐

  1. 李洪强iOS开发支付集成之微信支付

    iOS开发支付集成之微信支付 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 1 - 集成前首先要看看文档 开 ...

  2. lintcode :最大子数组

    题目:  最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 ...

  3. 自旋锁spin_lock和raw_spin_lock

    自旋锁spin_lock和raw_spin_lock Linux内核spin_lock.spin_lock_irq 和 spin_lock_irqsave 分析 http://blog.csdn.ne ...

  4. C++:纯虚函数与抽象类

    5.4.3 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但是要求在派生类中根据需要对它进行定义,或仍然说明为纯虚函数. 声明纯虚函数的一般格式是: virtual 函数 ...

  5. 在C#中实现Python的分片技术

    在C#中实现Python的分片技术 前言 之前在学习Python的时候发现Python中的分片技术超好玩的,本人也是正则表达式热爱狂,平时用C#比较多,所以决定把Python中的分片技术在C#中实现, ...

  6. BeanFactory 和 ApplicationContext

    Spring通过一个配置文件描述Bean及Bean直接的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系.Sprig的IoC容器在完成这些底层工作的基础上,还提供了Bea ...

  7. js 字符串日期 转成 Date

    只支持 2015/09/23 反斜杠这样类型 2015-09-23 单横的这种无法识别 var dateStr='${endDate}'; dateStr=dateStr.replace(/-/g,' ...

  8. JVM学习笔记(一)------基本结构

    从Java平台的逻辑结构上来看,我们可以从下图来了解JVM: 从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别 对于JVM自身的物理结构,我们可以从下图鸟瞰一下: 对于J ...

  9. enum,struct,union类型使用和长度

    VC,C++ Builder和lcc三个编译器 间枚举类型enum长度的情况. 各种C编译器默认的字节对齐数不一致,要写通用的代码,经常就是使用 #pragma pack(1) ... #pragma ...

  10. Android中LayoutInflater的使用

    Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater 的作用类似于 findViewById(),不同点是LayoutInflater是用来找layou ...