Storm手册

本文详细介绍了Apache Storm的核心组件——Spout和Bolt的各个方法,包括open、declareOutputFields、nextTuple等,并探讨了Storm的分组策略,如ShuffleGrouping、FieldsGrouping和DirectGrouping等,帮助读者深入理解Storm的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Storm的配置文件各个选项及释义

配置选项名称

配置选项作用

topology.max.task.parallelism

每个Topology运行时最大的executor数目

topology.workers

每个Topology运行时的worker的默认数目,若在代码中设置,则此选项值被覆盖

storm.zookeeper.servers

zookeeper集群的节点列表

storm.local.dir

Storm用于存储jar包和临时文件的本地存储目录

storm.zookeeper.root

Storm在zookeeper集群中的根目录,默认是“/”

ui.port

Storm集群的UI地址端口号,默认是8080

nimbus.host:

Nimbus节点的host

supervisor.slots.ports

Supervisor节点的worker占位槽,集群中的所有Topology公用这些槽位数,即使提交时设置了较大数值的槽位数,系统也会按照当前集群中实际剩余的槽位数来进行分配,当所有的槽位数都分配完时,新提交的Topology只能等待,系统会一直监测是否有空余的槽位空出来,如果有,就再次给新提交的Topology分配

supervisor.worker.timeout.secs

Worker的超时时间,单位为秒,超时后,Storm认为当前worker进程死掉,会重新分配其运行着的task任务

drpc.servers

在使用drpc服务时,drpc server的服务器列表

drpc.port

在使用drpc服务时,drpc server的服务端口

二.Storm中spout各个方法含义

1.open方法

当一个Task被初始化的时候会调用此open方法。一般都会在此方法中对发送Tuple的对象SpoutOutputCollector和配置对象TopologyContext初始化。

2.declareOutputFields方法

此方法用于声明当前Spout的Tuple发送流。Stream流的定义是通过OutputFieldsDeclare.declareStream方法完成的,其中的参数包括了发送的域Fields。

3.getComponentConfiguration方法

此方法用于声明针对当前组件的特殊的Configuration配置。

4.nextTuple方法

这是Spout类中最重要的一个方法。发射一个Tuple到Topology都是通过这个方法来实现的。

5.ack

6.fail

三.storm中bolt各个方法

1.prepare方法

此方法和Spout中的open方法类似,为Bolt提供了OutputCollector,用来从Bolt中发送Tuple。执行在execute方法之前

2.declareOutputFields方法

用于声明当前Bolt发送的Tuple中包含的字段

3.execute方法

这是Bolt中最关键的一个方法,对于Tuple的处理都可以放到此方法中进行。具体的发送也是通过emit方法来完成的。此时,有两种情况,一种是emit方法中有两个参数,另一个种是有一个参数。

(1)emit有一个参数:此唯一的参数是发送到下游Bolt的Tuple,此时,由上游发来的旧的Tuple在此隔断,新的Tuple和旧的Tuple不再属于同一棵Tuple树。新的Tuple另起一个新的Tuple树。

(2)emit有两个参数:第一个参数是旧的Tuple的输入流,第二个参数是发往下游Bolt的新的Tuple流。此时,新的Tuple和旧的Tuple是仍然属于同一棵Tuple树,即,如果下游的Bolt处理Tuple失败,则会向上传递到当前Bolt,当前Bolt根据旧的Tuple流继续往上游传递,申请重发失败的Tuple。保证Tuple处理的可靠性。

4.getComponentConfiguration方法

此方法用于声明针对当前组件的特殊的Configuration配置

四.storm分组策略

(1)ShuffleGrouping:随机分组,随机分发Stream中的tuple,保证每个Bolt的Task接收Tuple数量大致一致;

(2)FieldsGrouping:按照字段分组,保证相同字段的Tuple分配到同一个Task中;

(3)AllGrouping:广播发送,每一个Task都会受到所有的Tuple;

(4)GlobalGrouping:全局分组,所有的Tuple都发送到同一个Task中,此时一般将当前Component的并发数目设置为1;

(5)NonGrouping:不分组,和ShuffleGrouping类似,当前Task的执行会和它的被订阅者在同一个线程中执行;

(6)DirectGrouping:直接分组,直接指定由某个Task来执行Tuple的处理,而且,此时必须有emitDirect方法来发送;

(7) localOrShuffleGrouping:和ShuffleGrouping类似,若Bolt有多个Task在同一个进程中,Tuple会随机发给这些Task。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

minmax329

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值