博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
storm容易混淆的继承对象的对比IRichBolt/IBasicBolt
阅读量:5942 次
发布时间:2019-06-19

本文共 1816 字,大约阅读时间需要 6 分钟。

hot3.png

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来处理。具体可以见:

BatchOutputCollector

和IBatchBolt对应的Collector

BaseTransactionalBolt

事务性的Bolt

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

转载于:https://my.oschina.net/u/2300159/blog/382524

你可能感兴趣的文章
马云携阿里17位创始人及合伙人捐赠浙大一院5.6亿,杭州渐成中国硅谷
查看>>
《libGDX移动游戏开发从入门到精通》一第2章 libGDX的架构分析
查看>>
《配置管理最佳实践》——2.10 建立构建过程
查看>>
《C++入门经典(第5版•修订版)》——2.6 问与答
查看>>
PLM调研第二天
查看>>
《精通Linux设备驱动程序开发》——1.5 Linux发行版
查看>>
《术以载道——软件过程改进实践指南》—第1章1.3节如何实施CMMI
查看>>
Harris’s Linked List
查看>>
(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践
查看>>
什么Linux服务器最适合你?
查看>>
git 换行符问题,统一linux风格
查看>>
SQL on Linux Run on Docker
查看>>
C语言程序设计实践(OJ)-初识函数
查看>>
Spark机器学习9· 实时机器学习(scala with sbt)
查看>>
数据结构实践——队列数组
查看>>
从Demo到日千万PV,就是快! – 爱线下的上云实践
查看>>
Linux 时钟精度 与 PostgreSQL auto_explain (explain timing 时钟开销估算)
查看>>
架构师速成-架构目标之可用性
查看>>
云栖TechDay精华文章合集
查看>>
Java 深、浅克隆
查看>>