Storm Bolt接口
Bolt是Topology中数据处理的基本单元,也是Storm针对处理过程的编程单元。Topology中所有的处理都是在这些bolt中完成的。 Bolt可以将数据项发送至多个数据流(Stream)。编程人员首先可以使用OutputFieldsDeclarer类的declareStream()方法声明多个流,指定数据将要发送到的流,然后使用SpoutOutputCollector的emit方法将数据发送(原生spout)。
Storm为Bolt提供的编程抽象,以接口的形式,面向接口的编程风格。其中IRichBolt是使用Java语言实现Bolt最主要的接口。事实上,IRichBolt本身并未提供更多属性或方法,只是扩展了(extends)另外两个接口IBolt和IComponent。
IRichBolt是使用Java语言实现Bolt最主要的接口,拓展了(extends)另外两个接口IBolt和IComponent.。接口包含的方法有prepare(in stormConf,in context,in collector):void,execute(in tuple) :void,cleanup():void。最重要的方法是execute(),该方法接收一个数据项作为输入。Bolt可以将处理后的结果作为新的Tuple,使用OutputCollector对象的emit()方法发送。Bolt可以在OutputCollector中对每一个发送数据项调用ack()方法,使得storm能够追溯这个数据项是否被完整处理。
IBolt和IComponent接口
1、prepare()与cleanup() void prepare(java.util.Map.stormConf,TopologyContext context,OutputCollector collector)
prepare()用于实例化Bolt的一个运行时任务,被集群中某一进程调用,提供Bolt运行的环境。prepare()方法三个参数:stormConf,context,collector.
(1)sotrmConf对象维护Storm中针对该Bolt的配置信息。这些配置信息是Topology提供的,被集群中运行该Bolt的机器使用。
(2)context上下文对象,用于获取该组件运行时任务的信息。
(3)collector对象用于从该Bolt发送数据项。
2、execute()
该方法用于Bolt从Topology中接收一个数据项(Tuple),并可以将处理的结果作为新的数据项发送(emit),是Bolt需要实现的最重要的方法。这个方法的参数input是一个数据项对象,它包含了众多的元数据(metadata),包括它来自的组件、流、任务等。数据项中的值,可以通过Tuple类的getValue()方法获得。处理结果的发送是通过在prepare()方法中提供的OutputCollector对象,调用emit方法实现。
3、IBasicBolt和BaseBasicBolt
在许多场景下Bolt的数据处理,都需要确认处理完成或认定失败。需要代码emit数据和调用ack/fail。Storm提供了另一个用来实现Bolt的接口IBasicBolt,用于该接口的实现类,会在执行execute方法之后自动调用ack方法。
Storm Bolt接口的更多相关文章
- Storm bolt重复消费问题解决
最近碰到一个storm的坑, 两个bolt都需要从kafkaSpout中获取数据进行各自的业务处理, bolt1的处理是幂等的, bolt2的处理是非幂等的, 上线后发现非幂等的bolt处理总是会处理 ...
- Storm介绍(一)
作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 内容简介 本文是Storm系列之一,介绍了Storm的起源,Storm ...
- storm源码之storm代码结构【译】【转】
[原]storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正 ...
- 【原】storm源码之storm代码结构【译】
说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于Storm进行源码级学习和研究的朋友有所帮助 ...
- storm源码之storm代码结构【译】
storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于S ...
- Apache Storm 1.1.0 发布概览
写在前面的话 本人长期关注数据挖掘与机器学习相关前沿研究.欢迎和我交流,私人微信:846731084 我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来 ...
- Storm日志分析调研及其实时架构
1.Storm第一个Demo 2.Windows下基于eclipse的Storm应用开发与调试 3.Storm实例+mysql数据库保存 4.Storm原理介绍 5. flume+kafka+stor ...
- SpringBoot整合Kafka和Storm
前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...
- Storm入门(十)Twitter Storm: Transactional Topolgoy简介
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/736/twitter-stor ...
随机推荐
- Android开发--ScrollView的应用
1.简介 当内容无法全部显示时,需要采取滚动的方式获取其与内容.其中,ScrollView为垂直滚动控件,HorizontalScrollView为水平滚动控件. 2.构建
- guava学习--File1
ByteSource:表示一个可读的字节.通常情况下,我们期望的字节来源是一个文件,但它也可以从一个字节数组读取字节. File f1 = new File("D:\\test2.txt&q ...
- ASP.NET中的Session怎么正确使用[转]
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- 公用表表达式CTE
公用表表达式CTE表面上和派生表非常相似,看起来只是语义上的区别.但和派生表比较起来,CTE具有几个优势:第一,如果须要在一个CTE中引用另一个CTE,不需要像派生表那样嵌套,相反,只要简单地在同一个 ...
- 2014年4月份第1周51Aspx源码发布详情
基于Extjs4+MVC4权限管理源码 2014-3-31 [VS2012]源码描述: 20140331更新:修改部门管理中bug 20140303更新:增加部门管理模块,主要包含部门添加,编辑,删 ...
- 应用容器Application container
应用容器是最基本的组件,用于布局的容器. 属性 样式 事件 默认白边各24像素,默认为浏览器大小可以设置整体背景 边距等. 根应用文件就是第一个加载的文件.
- windows系统常用快捷键及其作用
使用windows快捷键,使得工作起来事半功倍,你都懂了么? win 7操作系统快捷键,其余的操作系统有部分不一致,但总体都差不多 win+D: 显示桌面/隐藏桌面 (再次按win+D,下同) (wi ...
- 【LeetCode OJ】Distinct Subsequences
Problem Link: http://oj.leetcode.com/problems/distinct-subsequences/ A classic problem using Dynamic ...
- React Native组件之ScrollView 和 StatusBar和TabBarIos
React Native中的组件ScrollView类似于iOS中的UIScrollView,其基本的使用方法和熟悉如下: /** * Sample React Native App * https: ...
- 阿里 RocketMQ 安装与简介
一.简介 官方简介: l RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: l 能够保证严格的消息顺序 l 提供丰富的消息拉取模式 l 高效的订阅者水平扩展能力 l 实时的 ...