先上个图:

 具体区别:

IRichBolt/IBasicBolt

区别IRichBolt和IBasicBolt

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

实现IRichBolt的Bolt有:BaseRichBolt,ClojureBolt,CoordinatedBolt,KeyedFairBolt,RichShellBolt等。

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

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

看下面的OutputCollector和BasicOutputCollector。

OutputCollector/BasicOutputCollector

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

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

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

而BasicOutputCollector没有此api,对应于IBasicBolt。

IBatchBolt

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

具体可以见:http://xumingming.sinaapp.com/736/twitter-storm-transactional-topolgoy/

BatchOutputCollector

和IBatchBolt对应的Collector

BaseTransactionalBolt

事务性的Bolt。

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

参考:https://my.oschina.net/u/2300159/blog/382524

bolt继承关系和区别的更多相关文章

  1. Hibernate注解方式配置-继承关系

    在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...

  2. Hibernate之jpa实体映射的三种继承关系

    在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...

  3. 【转载】OLE DB, ADO, ODBC关系与区别

    原文:OLE DB, ADO, ODBC关系与区别 OLE DB, ADO, ODBC 一. ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(W ...

  4. Hibernate笔记——表的的4种继承关系

    原文:http://justsee.iteye.com/blog/1070588 ===================================== 一.继承关系_整个继承树映射到一张表 对象 ...

  5. js继承关系

    跟传统面向对象语言比起来,js在继承关系方面比较特别,如果第一次看恐怕会有些抓狂,偶就是这样(又透露小白本质#=_=),从哪里说起好呢?函数调用? js中函数的调用方式大致可分以下几种: 1. 普通函 ...

  6. [Java]重载,重写以及继承,多态的区别

    转自:http://android.blog.51cto.com/268543/53181 什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承. ...

  7. 《Java程序员面试笔试宝典》之组合与继承有什么区别

    组合和继承是面向对象中两种代码复用的方式.组合是指在新类里面创建原有类的对象,重复利用已有类的功能.继承是面向对象的主要特性之一,它允许设计人员根据其它类的实现来定义一个类的实现.组合和继承都允许在新 ...

  8. C#继承关系中【方发表】的创建和调用

    —C#继承关系中[方发表]的创建和调用 Insus.NET实现一个最炫最原创的验证码.你可以从下面的一步一步的演译. 实现一个验证码,需要了解的是,它最基本是随机产生字符串:<在ASP.NET ...

  9. java中的装饰设计模式,浅谈与继承之间的区别

    最初接触装饰设计模式,一直搞不懂这么做的意义是什么,看了网上很多的资料,对于与继承的区别并没有很清楚的分析,直到看到这篇博客:http://www.cnblogs.com/rookieFly-tdii ...

随机推荐

  1. 阿里云监控RDS

    RDS性能监控API https://help.aliyun.com/document_detail/26280.html?spm=a2c4g.11186623.6.1576.341d7159uzLD ...

  2. json传的解析,二维数据解析

    下载地址:https://share.weiyun.com/447eda75fdd46cb87f6622ecdce4c3ac

  3. Spring Cloud Gateway转发Spring WebSocket

    Spring Cloud Gateway转发Spring WebSocket 源码:https://github.com/naah69/SpringCloud-Gateway-WebSocket-De ...

  4. vue工作原理分析

    初始化 在 new Vue() 时会调⽤用_init()进⾏行行初始化,会初始化各种实例例⽅方法.全局⽅方法.执⾏行行⼀一些⽣生命周期. 初始化props. data等状态.其中最重要的是data的「 ...

  5. Vue axios异步获取后台数据alert提示undefined

    记录一个小问题,关于分页查询套餐 前台通过axios异步请求获取后台数据alert弹出数据提示undefined 下面有三个bean PageResult /** * 分页结果封装对象 */ publ ...

  6. Linux下源码编译Mysql5.7

    1.安装依赖包 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf automake zlib libxml libgc ...

  7. vue-router路由传递参数 + get传值query获取

    [步骤] (1)路由配置 或者 (2)传递参数 或者 (3)接收传递参数 或者 [二]步骤小结 [三]参数形式 (1)上面这种是/100形式传递过去 (2)另外还有?count=100的格式,这便是g ...

  8. Caused by: java.lang.ClassNotFoundException: Cannot find class:

    Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibat ...

  9. Springboot测试类之@RunWith注解

    @runWith注解作用: --@RunWith就是一个运行器 --@RunWith(JUnit4.class)就是指用JUnit4来运行 --@RunWith(SpringJUnit4ClassRu ...

  10. python基础语法19 面向对象总结,pickle保存对象注意事项

    面向对象的三大特性: 继承,封装,多态 多态的三种表现形式:鸭子类型,继承父类,继承抽象类 pickle保存对象注意事项 class Foo: y = 20 def __new__(cls, *arg ...