bolt继承关系和区别
先上个图:

具体区别:
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继承关系和区别的更多相关文章
- Hibernate注解方式配置-继承关系
在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...
- Hibernate之jpa实体映射的三种继承关系
在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...
- 【转载】OLE DB, ADO, ODBC关系与区别
原文:OLE DB, ADO, ODBC关系与区别 OLE DB, ADO, ODBC 一. ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(W ...
- Hibernate笔记——表的的4种继承关系
原文:http://justsee.iteye.com/blog/1070588 ===================================== 一.继承关系_整个继承树映射到一张表 对象 ...
- js继承关系
跟传统面向对象语言比起来,js在继承关系方面比较特别,如果第一次看恐怕会有些抓狂,偶就是这样(又透露小白本质#=_=),从哪里说起好呢?函数调用? js中函数的调用方式大致可分以下几种: 1. 普通函 ...
- [Java]重载,重写以及继承,多态的区别
转自:http://android.blog.51cto.com/268543/53181 什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承. ...
- 《Java程序员面试笔试宝典》之组合与继承有什么区别
组合和继承是面向对象中两种代码复用的方式.组合是指在新类里面创建原有类的对象,重复利用已有类的功能.继承是面向对象的主要特性之一,它允许设计人员根据其它类的实现来定义一个类的实现.组合和继承都允许在新 ...
- C#继承关系中【方发表】的创建和调用
—C#继承关系中[方发表]的创建和调用 Insus.NET实现一个最炫最原创的验证码.你可以从下面的一步一步的演译. 实现一个验证码,需要了解的是,它最基本是随机产生字符串:<在ASP.NET ...
- java中的装饰设计模式,浅谈与继承之间的区别
最初接触装饰设计模式,一直搞不懂这么做的意义是什么,看了网上很多的资料,对于与继承的区别并没有很清楚的分析,直到看到这篇博客:http://www.cnblogs.com/rookieFly-tdii ...
随机推荐
- Macro的写法 `( , ,@ )
另外的注意点: 1. 同名符号的 “变量捕捉” (varible capture) 解决方式: with-gensym 生成几个unique name-s, 然后将它们各自绑定上参数值 2. 多次 ...
- DISK2VHD 转win2008 无法启动
windows 2008R2物理机,使用微软的DISK2VHD转换成虚拟盘,挂到虚拟机上,无法启动只有光标闪.找来window2008安装盘 选择“修复windows系统”, 调出cmd命令提示符Bo ...
- 通俗易懂的讲解一下Java的代理模式
一.基本概念 代理模式是对象的结构模式. 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用(接口的引用) 二.静态代理 静态代理是指,代理类在程序运行前就已经定义好,其与**目标类 ...
- javascript(六)运算符
运算符概述 JavaScript中的运算符用于算术表达式. 比较表达式. 逻辑表达式. 赋值表达式等.需要注意的是, 大多数运算符都是由标点符号表示的, 比如 "+" 和" ...
- 搜索引擎elasticsearch监控利器cat命令
目录 一.Cat通用参数 二.cat命令 三.示例 查询aurajike索引下的总文档数和有效文档数 查询aurajike各分片的调度情况 一.Cat通用参数 参数名 指令示例 功能 Verbose ...
- linux 搭建swoole
1安装依赖包yum -y install gcc gcc-c++ autoconf automake yum -y install zlib zlib-devel openssl openssl-de ...
- CTF-代码审计(1)——parse_str()变量覆盖
题目连接:http://222.18.158.226:7000/iscc.php 考点:parse_str()变量覆盖 代码: PHP知识点: 1.parse_url() 参照网址:https://w ...
- Solr缓存原理分析及配置优化
一.缓存原理 缓存,带来急速性能体验! Solr提供了一系列的内置缓存来优化查询性能.Solr的缓存原理主要涉及以下4个方面: 1.缓存大小及缓存置换法 从缓存大小的角度来看,不能将缓存设置的太大,否 ...
- 尚硅谷MySQL高级学习笔记
目录 数据库MySQL学习笔记高级篇 写在前面 1. mysql的架构介绍 mysql简介 mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...
- CMake相关代码片段
目录 用于执行CMake的.bat脚本 CMakeLists.txt和.cmake中的代码片段 判断平台:32位还是64位? 判断Visual Studio版本 判断操作系统 判断是Debug还是Re ...