文档章节

storm容易混淆的继承对象的对比IRichBolt/IBasicBolt

 如风达
发布于 2015/03/04 14:55
字数 536
阅读 754
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>


IBolt

package backtype.storm.task;

public interface IBolt extends Serializable

接收tuple作为输入,输出tuple,可以用来作过滤,连结,聚合等。

IBolt提交到Nimbus后,Nimbus将作业发送到worker后,每个task初始化时都会调用prepare。

 

TopologyContext

package backtype.storm.task;

public class TopologyContext extends WorkerTopologyContext implements IMetricsContext

TopologyContext向bolts 和spouts 提供”prepare” and “open” 方法。 TopologyContext提供了组件的各种信息,流的信息,task的信息等。

ShellSpout/ShellBolt

package backtype.storm.task;

public class ShellSpout implements ISpout 

package backtype.storm.spout;

public class ShellBolt implements IBolt 

Storm可以用其它语言来实现SpoutBolt的功能,如PythonRubyShellSpout /ShellBolt 采用一个特别的协议,通过标准IO和其通信。

IRichBolt/IBasicBolt

区别IRichBoltIBasicBolt

IRichBolt继承自IBoltIComponentIBasicBolt继承自IComponent,和IBolt没有继承关系。

实现IRichBoltBolt有:BaseRichBolt,ClojureBolt,CoordinatedBolt,KeyedFairBolt,RichShellBolt等。

实现IBasicBolt的有:BaseBasicBolt,IdentityBolt,PrepareBatchBolt等。

他们的区别在于IRichBolt需要手动的ackfail消息,若不ack,很快就outOfMemory了;而IBasicBolt不需要确认消息,自动完成。

看下面的OutputCollector和BasicOutputCollector。

OutputCollector/BasicOutputCollector

OutputCollector实现了IOutputCollector,方法有:emit,emitDirect,ack,fail。

BasicOutputCollector实现了IBasicOutputCollector,方法有:emit,emitDirect,reportError。

可以看到,OutputCollector暴露了emit APIIRichBolt,包括了ackfail,用来对应消息成功/失败后的处理,可以保证消息不丢失。具体可以看:如何保证消息不丢失

而BasicOutputCollector没有此api对应于IBasicBolt。

IBatchBolt

顾名思义,批处理的Bolt,与IRichBoltIBasicBolt也没有继承关系。这个bolt对象每次处理一批batch在一起的tuples。对于每一个tuple调用execute方法。而在整个batch处理完成的时候调用finishBatch方法。然后新来一批tuples,会产生新的batchBolt来处理。具体可以见:

http://xumingming.sinaapp.com/736/twitter-storm-transactional-topolgoy/

BatchOutputCollector

和IBatchBolt对应的Collector

BaseTransactionalBolt

事务性的Bolt

记住:继承了BaseTransactionalBolt的classexecute方法中获取tuple时,应从下标为1开始获取,第0个为TransactionAttempt对象,为<txid,_attemptId>,用来记录tuples重放时。因为事务性的bolt继承了批处理的bolt,具体还是见IBatchBolt中关于事务性拓扑的链接。


本文转载自:http://hnote.org/big-data/storm/storm-basic

上一篇: Ehcache详细解读
下一篇: storm日志bebug问题
粉丝 7
博文 256
码字总数 23157
作品 0
深圳
私信 提问
IRichBolt和IBasicBolt/BaseBasicBolt对比

对于spout,有ISpout,IRichSpout,BaseRichSpout 对于bolt,有IBolt,IRichBolt,BaseRichBolt,IBasicBolt,BaseBasicBolt IBasicBolt,BaseBasicBolt不用每次execute完成都写ack/fail,因......

cjun1990
2014/12/25
4K
0
Storm Component基本接口

IComponent IComponent接口是所有组件的接口。 主要包含两个方法: declareOutputFields:为拓扑的所有流组件生命输出模式。 getComponentConfiguration:声明指定组件大的配置。只有"topolo...

Yulong_
2017/08/14
32
0
Storm tuple发送机制中的重发

从一个程序异常说起 最近的一个项目走到线下测试阶段,同事写了一堆测试数据进Kafka,我的代码负责通过KafkaSpout消费消息。结果出现一个很怪异的事情,对方每20秒写10000条消息进Kafka,我的...

DJZhu
2017/03/03
112
0
storm starter学习(一)

官方提供的storm starter示例中,有很多应用的例子,对storm的应用场景理解很有帮助。本文结合源码来进行功能分解,记录一下,作为记忆索引吧。 先来看一个比较简单的示例:WordCountTopolo...

GoldenRoc
2014/08/11
236
0
Storm概念讲解和工作原理介绍

Strom的结构 Storm与传统关系型数据库 传统关系型数据库是先存后计算,而storm则是先算后存,甚至不存 传统关系型数据库很难部署实时计算,只能部署定时任务统计分析窗口数据 关系型数据库重...

张超
2015/04/26
2.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

ThreadLocal

一、ThreadLocal简介   多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步...

architect刘源源
29分钟前
13
0
微信小程序客服会话卡片、自定义客服消息卡片

一、微信客服会话启用会话卡片 1. open-type="contact" 2. show-message-card =true 更多参考官方文档: https://developers.weixin.qq.com/miniprogram/dev/component/button.html 当前效果......

tianma3798
44分钟前
6
0
练习Linux常用命令

练习命令 Linux常用命令 Linux中一切皆文件,没有消息就是最好的消息 以下所有命令以centos7为基础, 网络相关配置 测试外网是否连通 安装网卡测试工具,即ifconfig程序 查看网卡 临时修改I...

千年典韦
45分钟前
10
0
从poison社网站爬取历代作品资料

使用的语言是python,爬取使用的代码包在我的主页有提供. 其中一些相关的数据设定如下(复制为data.py,然后运行主页提供的包的main.py): from mypython import *CODE = '4fjl_fjiepq24x' #...

setycyas
54分钟前
36
0
确定已安装的PowerShell版本 - Determine installed PowerShell version

问题: 如何确定计算机上安装了哪个版本的PowerShell,以及是否确实安装了该版本? 解决方案: 参考一: https://stackoom.com/question/7euv/确定已安装的PowerShell版本 参考二: https://...

技术盛宴
56分钟前
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部