先上个图:

 具体区别:

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. 我是如何一步步编码完成万仓网ERP系统的(七)产品库设计 3.品牌图片跨域上传

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  2. .Net IOC框架入门之——CastleWindsor

    一.简介 Castle是.net平台上的一个开源项目,为企业级开发和WEB应用程序开发提供完整的服务,用于提供IOC的解决方案.IOC被称为控制反转或者依赖注入(Dependency Injectio ...

  3. Macbook中VMWare的Centos7虚拟机配置静态IP并允许上网的配置方法

    一.检查Macbook本身的配置 1.打开[系统偏好设置]-[网络]- 选中[Wi-Fi]项(如果您是WIFI上网请选择此项)- 点右侧[高级] 选择[TCP/IP]选项卡,记录好[子网掩码].[路由 ...

  4. MySQL——数据库操作

    1.创建数据库 登录MySQL服务后,使用create命令创建数据库 # 登录MySQL进入终端 mysql -u root -p # 之后输入命令 create database database_ ...

  5. 转摘python3.4 + pycharm 环境安装 + pycharm使用

    遇到很多初学者的盆友,来问python环境安装的问题..因此,这篇文章就诞生了.. 因个人是windows的环境,所以本文只讲windows环境下的python安装. 作为初用python的盆友,强烈 ...

  6. pg 数据库操作

    一.pg数据库修改操作 Insert into table (key) values (value) on conflict(主键) do update set key=value; 修改的 valu ...

  7. guava布隆过滤器

    pom引入依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava&l ...

  8. 3. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来建立源代码仓库,并签入/签出代码。

    上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? ---------------答题者:徐潇瑞 (1)Microsoft TFS的优缺点: 优点:是对敏捷,msf,c ...

  9. window开机启动

    C:\Users\sunyues\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 再次文件夹下写脚本就可 @echo off ...

  10. Sigmoid函数与Softmax函数的理解

    1. Sigmod 函数 1.1 函数性质以及优点 其实logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线(S型曲线).               其中z ...