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的更多相关文章

  1. Storm配置项详解【转】

    Storm配置项详解 ——阿里数据平台技术博客:storm配置项详解 什么是Storm? Storm是twitter开源的一套实时数据处理框架,基于该框架你可以通过简单的编程来实现对数据流的实时处理变 ...

  2. Storm命令详解

    在Linux终端直接输入storm,不带任何参数信息,或者输入storm help,可以查看storm命令行客户端(Command line client)提供的帮助信息.Storm 0.9.0.1版 ...

  3. 【转】Storm并行度详解

    1.Storm并行度相关的概念 Storm集群有很多节点,按照类型分为nimbus(主节点).supervisor(从节点),在conf/storm.yaml中配置了一个supervisor,有多个槽 ...

  4. Storm Trident详解

    Trident是基于Storm进行实时留处理的高级抽象,提供了对实时流4的聚集,投影,过滤等操作,从而大大减少了开发Storm程序的工作量.Trident还提供了针对数据库或则其他持久化存储的有状态的 ...

  5. storm配置详解

    storm的配置文件在${STORM_HOME}/conf/storm.yaml.下面详细说明storm的配置信息. java.libary.path:storm本身依赖包的路径,有多个路径的时候使用 ...

  6. Storm并行度详解

    一.Storm并行度相关的概念 Storm集群有很多节点,按照类型分为nimbus(主节点).supervisor(从节点),在conf/storm.yaml中配置了一个supervisor,有多个槽 ...

  7. Storm 学习之路(二)—— Storm核心概念详解

    一.Storm核心概念 1.1 Topologies(拓扑) 一个完整的Storm流处理程序被称为Storm topology(拓扑).它是一个是由Spouts 和Bolts通过Stream连接起来的 ...

  8. Storm 系列(二)—— Storm 核心概念详解

    一.Storm核心概念 1.1 Topologies(拓扑) 一个完整的 Storm 流处理程序被称为 Storm topology(拓扑).它是一个是由 Spouts 和 Bolts 通过 Stre ...

  9. storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解

    本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...

随机推荐

  1. ABAP术语-Customer Enhancement

    Customer Enhancement 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/18/1043874.html Adjustment ...

  2. 构建高可靠hadoop集群之4-保全模式

    本文主要翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/SecureMode.html 译注:之所以 ...

  3. checked="checked"无效,radio未选中问题排查

    在使用attr给元素设置属性的时候,但是显示在页面就是未选中,而且是只使用一两次是ok的,但是连着多使用就不起作用了,百度了下,发现遇到这个问题的人还蛮多的, 有人说,发现在jQuery1.6版本之后 ...

  4. XML文档处理

    1)CDATA部分用<![CDATA[和]]>来限定其界限,它们是字符数据的一种特殊形式,可用使用它们来囊括那些含有<.>,&之类字符的字符串,而不必将它们解释为标记例 ...

  5. python学习之字符串常用方法和格式化字符串

    Python中的字符串同样适用标准的序列操作(索引,分片,乘法,成员判断,求长度,取最小值和最大值),但因为字符串是不可变的,因此字符串不支持分片赋值. s='http://www.baidu.com ...

  6. 嵌入式框架Zorb Framework搭建三:列表的实现

    我是卓波,我是一名嵌入式工程师,我万万没想到我会在这里跟大家吹牛皮. 嵌入式框架Zorb Framework搭建过程 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建.调试输出和建立时间系 ...

  7. CS61B sp2018笔记 | Lists

    Lists csdn同作者原创地址 1. IntLists   下面我们来一步一步的实现List类,首先你可以实现一个最简单的版本: public class IntList { public int ...

  8. react ant-design自定义图标

    ant-design给我们提供的图标不够怎么办呢?答案是我们可以自定义图标. 自定义图标也挺简单的,现在图标推荐用svg格式,那么我们就需要制作svg图片. 下面让我们看看如果制作svg图片吧. 1. ...

  9. 【转】手把手教你:Ubuntu14+apache2+django1.7+python2.7下网页/网站部署

    本人亲自尝试了网上众多的部署网页/网站方法,绝大多数都未能试验成功,这次的项目光部署这块遇到了很多问题,大概耗费了我一个星期. 本着:王道论坛中的赠人玫瑰,手留余香的精神.我把自己一路所走的历程发布出 ...

  10. 完整的vue+vuex+api-router+database请求流程