Storm之详解spout、blot
1、Topology的构造
backtype.storm.topology.TopologyBuilder
2、Spout组件的编写
实现接口 backtype.storm.topology.IRichSpout;
或者继承backtype.storm.topology.base.BaseRichSpout;
@Override
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
// TODO Auto-generated method stub
}
open 方法,是spout的组件初始化方法,而且Spout实例创建后首先被调用,只调用一次
@Override
public void close() {
// 对于资源的释放关闭,可以在该方法中实现
}
@Override
public void nextTuple() {
// 实现如何从数据源上获取数据的逻辑
// 以及向后面的组件bolt发射数据
}
nextTuple 循环调用
@Override
public void ack(Object msgId) {
}
Topology启用了消息可靠性保障机制,当某个Tuple在Topology上处理成功后,调用ack方法执行一些消息处理成功后该干的事情
@Override
public void fail(Object msgId) {
// Topology启用了消息可靠性保障机制,某个Tuple在后面处理失败,该干什么
// 比如重试,重试达到最大可重试(比如三次)就丢弃
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
// 声明向后面组件发射的Tuple keys依次是什么
}
@Override
public Map<String, Object> getComponentConfiguration() {
// 设置该组件Spout一些专用的参数
return null;
}
kafkaSpout 向后发射的Tuple {"str":"msg"}
注意点:
Topology中使用的一些类,最好都要实现序列化接口 java.io.Serializable
3、Bolt组件
实现backtype.storm.topology.IRichBolt
或者继承backtype.storm.topology.base.BaseRichBolt
@Override
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
//类似于spout中open方法
}
SpoutOutputCollector spout组件中tuple的发射器
OutputCollector bolt组件中tuple发射器
@Override
public void execute(Tuple input) {
// TODO Auto-generated method stub
}
execute 类似于Spout的nextTuple方法
@Override
public void cleanup() {
// TODO Auto-generated method stub
}
类似于spout中close方法
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
// 声明向后面组件发射的Tuple keys依次是什么
}
@Override
public Map<String, Object> getComponentConfiguration() {
// 设置该组件Spout一些专用的参数
return null;
}
4、数据流分组 方式
shuffleGrouping 随机分配
fieldsGrouping 根据key分组进行分配
globalGrouping 全局分组 只会将tuple往后面组件中固定一个上发送
5、消息可靠性保障机制
启用消息可靠性保障机制:ack、fail
Spout端:
1)发射器发射tuple时,需要指定一个msgID
collector.emit(new Values(sentence),mssageId );
2)使用缓存所发射的tuple,Map key=msgID,value = Values
private Map<Object,Values> tuples;
3)ack方法
// 确认发射成功,将tuple从缓存中移除
tuples.remove(msgId);
4)fail方法
重试
// 重试
Values values = tuples.get(msgId);
// 重新发射
collector.emit(values,msgId );
Bolt端:
1)如果bolt端继续往后面组件发射,需要锚定前面的tuple
// 启用消息可靠性保障机制,需要锚定接收到tuple
collector.emit(input,new Values(word));
2)处理完tuple后
// 确认处理结束
collector.ack(input);
try{
}catch{
// 处理失败
collector.fail(input);
}
Storm之详解spout、blot的更多相关文章
- Storm配置项详解【转】
Storm配置项详解 ——阿里数据平台技术博客:storm配置项详解 什么是Storm? Storm是twitter开源的一套实时数据处理框架,基于该框架你可以通过简单的编程来实现对数据流的实时处理变 ...
- Storm命令详解
在Linux终端直接输入storm,不带任何参数信息,或者输入storm help,可以查看storm命令行客户端(Command line client)提供的帮助信息.Storm 0.9.0.1版 ...
- 【转】Storm并行度详解
1.Storm并行度相关的概念 Storm集群有很多节点,按照类型分为nimbus(主节点).supervisor(从节点),在conf/storm.yaml中配置了一个supervisor,有多个槽 ...
- Storm Trident详解
Trident是基于Storm进行实时留处理的高级抽象,提供了对实时流4的聚集,投影,过滤等操作,从而大大减少了开发Storm程序的工作量.Trident还提供了针对数据库或则其他持久化存储的有状态的 ...
- storm配置详解
storm的配置文件在${STORM_HOME}/conf/storm.yaml.下面详细说明storm的配置信息. java.libary.path:storm本身依赖包的路径,有多个路径的时候使用 ...
- Storm并行度详解
一.Storm并行度相关的概念 Storm集群有很多节点,按照类型分为nimbus(主节点).supervisor(从节点),在conf/storm.yaml中配置了一个supervisor,有多个槽 ...
- Storm 学习之路(二)—— Storm核心概念详解
一.Storm核心概念 1.1 Topologies(拓扑) 一个完整的Storm流处理程序被称为Storm topology(拓扑).它是一个是由Spouts 和Bolts通过Stream连接起来的 ...
- Storm 系列(二)—— Storm 核心概念详解
一.Storm核心概念 1.1 Topologies(拓扑) 一个完整的 Storm 流处理程序被称为 Storm topology(拓扑).它是一个是由 Spouts 和 Bolts 通过 Stre ...
- storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解
本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...
随机推荐
- 【模板】概率dp
有n个投资事件,和一个成功概率最低接受值rate.每个投资的价值是c[i],成功概率是p[i](浮点数). 在保证成功概率≥rate的情况下,使价值最大化. #include<bits/stdc ...
- 【PTA 天梯赛训练】六度空间(广搜)
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论.这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够 ...
- SAP物料主数据的屏幕字段控制,必输,隐藏
http://www.cnblogs.com/275147378abc/p/5699077.html 1.事务码MM01,把物料组设为选填字段. 2.找到物料组的屏幕字段. 3.在后台根据屏幕字段找到 ...
- JQuery实现聊天对话框
效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- VMware下CentOS7安装后,还原虚拟网络后,敲ifconfig不显示局域网ip解决方法
VMware下CentOS7安装后,还原虚拟网络后,敲ifconfig不显示局域网ip,没有出现eth0网卡,不能上网,SSH不能连接,输入ifconfig后如下图: 解决方法: 1.编辑网卡的配置文 ...
- TcpServer 使用简介
1.简介 1) Poco 的 TcpServer 是一个多线程的 Tcp 服务器. 服务器使用 ServerSocket(Poco 的一个用于初始化服务器的socket的类) 来接收链接.Server ...
- Laravel5.x 封装的上传图片类
图片缩放需要用conposer安装 ImageManagerStatic类 可参考下面的地址安装: https://www.jb51.net/article/128159.htm 控制器里: 控制器里 ...
- Hadoop(3)-Hadoop介绍
Hadoop三大发行版本 Hadoop三大发行版本:Apache.Cloudera.Hortonworks. Apache版本最原始(最基础)的版本,对于入门学习最好. Cloudera在大型互联网企 ...
- red hat 7 启动过程(EFI)
不同版本的Linux系统的启动过程在某些地方是不一样的,现在先来介绍一下red hat 7 的启动过程(EFI). (加电→图形登录界面) 接通电源 按下电源键 EFI固件启动 初始化硬件 从EFI启 ...
- abap<itab>refresh,clear,free
在ABAP开发过程中,clear,refresh,free都有用来清空内表的作用,但用法还是有区别的. clear itab,清空内表行以及工作区,但保存内存区. clear itab[],清空内表行 ...