storm使用(二)–使用java操作storm

storm使用(二)–使用java操作storm

一、简介

这里介绍使用java对storm的操作示例,包括拓扑定义、提交等。

二、storm特点

2.1 元组可靠性保证

storm能保证每一个元组都被完全处理,如果任务处理失败,会从消息源重新处理。每个元组完全处理后,会调用源spout的ack方法,否则调用源spout的fail方法,基于此能保证元组的可靠性。

2.2 容错性

storm被设置为无状态和快速失败。如果worker死亡,storm会重启,如果一个节点失败,storm会在其他节点重启。也就是直接kill进程不会影响topology。

2.3 可与任何语言使用

storm核心是基于thrift接口,因此topology可以用任何语言定义和提交。

三、storm基础接口

3.1 org.apache.storm.topology.IComponent接口

IComponent是所有组件的接口。方法有:

//指定元组的输出模式,声明输出流id、输出字段等。
void declareOutputFields(OutputFieldsDeclarer declarer);
//声明指定组件的配置
Map<String, Object> getComponentConfiguration();
3.2 org.apache.storm.spout.ISpout接口

ISpout是spout的核心接口,方法有:

//初始化spout时调用,其中conf为该spout的storm配置,context提供spout上下文信息,collector为收集器,用于发送元组。
void open(Map<String, Object> conf, TopologyContext context, SpoutOutputCollector collector);
//消息的源头,storm定期调用该方法获取元组。
void nextTuple();
//元组被完全处理时调用。
void ack(Object msgId);
//元组未被完全处理时(配置的超时时间内)调用,storm将重新处理该元组。
void fail(Object msgId);
//spout关闭时调用。
void close();
//spout从失效模式中激活时调用,后续nextTuple方法将会调用。
void activate();
//spout失效时调用,后续nextTuple方法不会被调用。
void deactivate();
3.3 org.apache.storm.task.IBolt接口

IBolt是bolt的核心接口,方法有:

//组件初始化时调用,topoConf为该bolt的storm配置,context为该bolt上下文信息,collector为收集器,用于发送元组。
void prepare(Map<String, Object> topoConf, TopologyContext context, OutputCollector collector);
//处理输入元组。
void execute(Tuple input);
//bolt关闭时调用。(非正常情况不会调用)
void cleanup();
3.4 org.apache.storm.topology.IRichSpout接口

IRichSpout接口继承ISpout和IComponent,定义如下:

public interface IRichSpout extends ISpout, IComponent {
   }
3.5 org.apache.storm.topology.IRichBolt接口

IRichBolt接口继承自IBolt和IComponent,定义如下:

public interface IRichBolt extends IBolt, IComponent {
   }

四、storm基础类

4.1 org.apache.storm.topology.base.BaseComponent类
//IComponent接口的基本抽象实现
public abstract class BaseComponent implements IComponent{
   }
4.2 org.apache.storm.topology.base.BaseRichSpout类

BaseRichSpout类是开发中Spout使用的基础类,定义如下:

public abstract class BaseRichSpout extends BaseComponent implements IRichSpout{
   }
4.3 org.apache.storm.topology.base.BaseBasicBolt类

BaseRichBolt类是开发中Bolt使用的基础类,自动对处理元组确认(区别于直接实现IRichBolt接口,需要手动确认collector.ack(tuple)),定义如下:

//元组自动确认
public abstract class BaseBasicBolt extends BaseComponent implements IBasicBolt{
   }

五、拓扑

5.1 拓扑创建类

org.apache.storm.topology.TopologyBuilder是拓扑创建类。

5.1.1 TopologyBuilder创建及常用方法

TopologyBuilder是拓扑创建类,示例生成如下:

TopologyBuilder builder = new TopologyBuilder();

常用方法有:

//在拓扑中声明一个spout(该方法有其他重载方法),id为该组件id,spout定义的spout,parallelism_hint为分配的任务数(每个任务一个线程)
public SpoutDeclarer setSpout(String id, IRichSpout spout, Number parallelism_hint){
   }
//在拓扑中声明一个bolt(该方法有其他重载方法),id为该组件id,将会被想消费的组件引用;bolt为定义的bolt;parallelism_hint为分配的任务数(每个任务一个线程)。
public BoltDeclarer setBolt
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值