了解Spout和bolt方法调用
Sqout方法调用顺序:
1.declareOutputFields() //声明发送字段信息,提交前执行
2.open() //提交集群后第一个执行
3.activate() //激活数据
4.netTuple() //循环调用
5.deactivate() //执行完毕
Bolt方法调用
1.decareOutputFields() //声明检查信息,提交集群先
2.prepare() //只执行一次
3.execute() //不停被调用
可以在ui页面可以kill掉,刷新就移除了。
下面我们来看看storm的配置详解
配置项 详解
storm.zookeeper.server zookeeper服务器列表
storm.zookeeper.port zookeeper连接端口
storm.local.dir storm使用本地文件系统目录(必须存在并且storm进程可读写)
storm.cluster.mode storm集群运行模式([distributed|local])
storm.local.mode.zmq localhost模式下是否使用zeromq作消息系统,如果设置false则使用java消息系统,默认false
storm.zookeeper.root zookeeper中storm的根目录位置
storm.zookeeper.session.timeout 客户端连接zookeeper超时时间
storm.id 运行中拓扑的id,由storm name和一个唯一随机数组成
nimbus.host nimbus的服务器地址
nimbus.thrift.port nimbus的thrift监听端口
nimbus.childopts 通过storm-deploy项目部署时制定给nimbus进程的jvm选项
nimbus.task.timeout.secs 心跳超时时间,超时后nimbus会认为task死掉并重新分配给另外一个地址
nimbus.supervisor.timeout.secs supervisor的心跳时间,一旦超过nimbus会认为该supervisor死掉,并停止给它分发任务
nimbus.task.launch.secs task启动时的一个特殊超时设置,在第一次启动后第一次心跳前用该值来临时替代nimbus.task.timout.secs
nimbus.reassign 当发现task失败时nimbus是否重新分配执行。默认为真,不需要修改
nimbus.file.copy.expiration.secs nimbus判断上传/下载链接的超时时间,一旦超时nimbus会认为链接死掉并主动断开
ui.port storm ui 的服务端口 默认为8080
drpc.server DRPC服务器列表,以便DRPCSpout知道和谁通信
drpc.port stormDRPC的服务端口
supervisor.slots.ports supervisor上能够运行workers的端口列表,每个worker占用一个端口,且每个端口只运行一个worker,通过这项配置可以调整每台 机器上运行的worker数(也就是调整slot数/每台机器)
supervisor.childopts 在storm-deploy项目中使用,用来配置supervisor守护进程的jvm选项
supervisor.worker.timeout.secs supervisor中的worker心跳超时时间,一旦超时supervisor会尝试重新启动worker进程
supervisor.worker.start.timeout supervisor初始启动时,worker的心跳超时时间,当超过这个时间时,supervisor会尝试重启worker进程,因为jvm初始启动和配置
会带来额外的消耗,从而使得第一次心跳会超过supervisor.worker.timeout.secs的设置
supervisor.enable supervisor是否应当运行分配给它的worker。默认为true,该选项用来进行storm的单元测试,一般不修改
supervisor.heartbeat.frequency.secs supervisor心跳发送的频率(多长时间发送一次)
supervisor.monitor.frequency.eccs supervisor检查worker心跳的频率
worker.childopts supervisor启动worker时使用的jvm选项。所有的"%ID%“字串会被替换为对应的worker的标识符
worker.heartbeat.frequnency.secs worker的心跳发送时间间隔
task.heartbeat.frequency.secs task汇报状态心跳时间间隔
task.refresh.poll.secs task与其他task之间的链接同步的频率(如果task被重新分配,其他task向它发送消息需要刷新连接)一般来将重新分配其他task会得 到通知。该配置仅仅是为了防止未通知的情况
topology.debug 如果设置为true。storm将记录发送的每条信息
topology.optimize master是否在合适时机通过在单个线程内运行的多个task以达到优化topologies的目的
topology.worker 执行该topology集群中应当的进程数量,每个进程内部将以线程方式执行行一定数量的tasks.topology的组件结合该参数和并行都提 示来优化性能
topology.ackers topology中启动的acker任务数,Acker保存由spout发送的tuples的记录,并探测tuple何时被完全处理。当Acker探测到tuple被完全 处理完毕时会向spout发送确认信息。通常应当根据topology的吞吐量来确定acker的数据,但一般不需要太多。当设置为0时,相当 于 禁用了消息可靠性,storm会在spout发送tuples后立即进行确认
topology.message.timeout.secs topology中的spout发送消息的最大处理超时时间。如果一条消息在改时间窗口内未被成功ack,storm会告知spout这条消息失败。 而部分spout实现了失败的消息重播功能
topology.kryo.register 注册到kryo(storm地城序列化框架)的序列化方案列表,序列化方案可以是一个类名。或者是com.esotericsoftware.kryo.Serializer
的实现
topology.skip.missing.kryo.registrations storm是否应该跳过它不能识别的kryo序列化方案,如果设置为false。task可能会装载失败或者在运行时抛出错误
topology.max.task.parallelism 在一个topology中能允许的最大组件并行度,该项配置主要用在本地模式中的测试线程数限制
topology.max.spout。pending 一个spout task中出于pending状态的最大的tuples数量,该配置应该用于单个task,而不是整个spout或者topology
topology.state.synchronization.timeout.secs 组件同步状态源的最大超时时间
topology.stats.samle.rate 用来产生task统计信息的tuples抽样百分比
topology.fall.back.on.java.serialization topology中是否使用java的序列化方案
zmq.threads 每个worker进程内zeromq通讯用到的线程数
zmq.linger.millis 当连接关闭时,链接尝试重新发送消息到目标主机的持续时间长,这个是一个不常用的高级选项,基本可以忽略
java.library.path Jvm启动(如Nimbus,Supervisor和workers)时的java.library.path设置。该选项告诉jvm在哪些路径下定位本地库