《Storm 入门》笔记及总结

Storm 读书笔记

本书主要是翻译了《Getting Started With Storm》。通过一个简单的单词分析和统计的例子,作为入门例子介绍Storm。

Storm 介绍

Storm 是由twitter开发,并贡献给了apache。

Storm,是一个分布式的,可靠的,容错的数据流处理系统。为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。

三个核心组件简介:使用者只需要将数据来源组件(spout:)、业务计算组件(bolt),编织到拓扑结构(topology:)中,然后提交给storm即可。
- spout
- bolt
- Topology

在 Storm 集群中,有两类节点:主节点* master node* 和工作节点 worker nodes。主节点运行着 一个叫做 Nimbus 的守护进程。这个守护进程负责在集群中分发代码,为工作节点分配任务,并 监控故障。Supervisor 守护进程作为拓扑的一部分运行在工作节点上。一个 Storm 拓扑结构在 不同的机器上运行着众多的工作节点

两种操作模式:
- 本地模式:Storm 拓扑结构运行在本地计算机的单一 JVM 进程上。开发和测试使用.使用LocalCluster
- 远程模式:在远程模式下,我们向 Storm 集群提交拓扑,它通常由许多运行在不同机器上的流程组成。远 程模式不会出现调试信息, 因此它也称作生产模式。使用StormSubmitter

storm 使用的技术栈

  1. zookeeper
    在ZK上维护storm集群的状态

  2. 0mq(zeromq)
    在storm底层使用。可嵌入的网络通讯库,它提供的绝妙功能使 Storm 成为可能。下面列出一些 zeromq 的特性。

    • 一个并发架构的 Socket 库
    • 对于集群产品和超级计算,比 TCP 要快
    • 可通过 inproc(进程内), IPC(进程间), TCP 和 multicast(多播协议)通信
    • 异步 I / O 的可扩展的多核消息传递应用程序
    • 利用扇出(fanout), 发布订阅(PUB-SUB),管道(pipeline), - 请求应答(REQ-REP),等方式
    • 实现 N-N 连接

NOTE: Storm 只用了 push/pull sockets

Topology

  • 创建方法
TopologyBuilder builder = new TopologyBuilder();

设计一个拓扑时,你要做的最重要的事情之一就是定义如何在各组件之间交换数据(数据流是如 何被 bolts 消费的)。一个数据流组指定了每个 bolt 会消费哪些数据流,以及如何消费它们。

  • 在示例中,使用的数据来源是文件和redis,另外也可以使用kafka 这样消息系统作为数据来源。
  • 并且每个 InputDeclarer 可以有一个以上的数据源,而且每个数据源可以分到不同的组。

数据流组
- 随机数据流组:最常用的,数据源会随机向bolt发送数据,保证每个消费者收到近似数量的元组

  • 域数据流组:基于元组的一个或多个域控制如何把元组发送给 bolts。它保证拥有相同域组 合的值集发送给同一个 bolt。
builder.setBolt("word-counter", new WordCounter(),2)
.fieldsGrouping("word-normalizer", new Fields("word"));

在域数据流组中的所有域集合必须存在于数据源的域声明中。
- 全部数据流组
全部数据流组,为每个接收数据的实例复制一份元组副本。这种分组方式用于向 bolts 发送信号。

应用场景:所有bolt缓存刷新。

builder.allGrouping("signals-spout","signals");

spout

  • 提供了可靠和不可靠消息两种机制。
    在可靠消息机制中,有相关重试机制

bolt

实现IRichBolt接口。bolts 对象由客户端机器创建,序列化为拓扑,并提交给集群中的 主机。然后集群启动工人进程反序列化 bolt,调用 prepare,最后开始处理元
- 生命周期方法

declareOutputFields(OutputFieldsDeclarer declarer)bolt 声明输出模式
prepare(java.util.Map stormConf, TopologyContext context, OutputCollector collector)
仅在 bolt 开始处理元组之前调用
execute(Tuple input)
处理输入的单个元组
cleanup()bolt 即将关闭时调用
  • 包括可靠的 bolts 和不可靠的 bolts
  • IBasicBolt 具有自动确认功能,会在执行 execute 方法之后自动调用 ack 方法。

提交远程执行方法

  1. 打包:mvn package
  2. 使用storm命令执行:storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3。

3.停止:storm kill Count-Word-Topology-With-Refresh-Cache

:拓扑名称必须保证惟一性。

并发度概念

1.Storm分为3个主要实体,用于在Storm集群中运行拓扑。

  • 工作进程:Worker Process,也称为Worker

  • 执行器:Executor,即线程Thread

  • 任务:Task
topologyBuilder.setSpout("SimpleSpout", new SimpleSpout(), 1); 并发度为1

如果一个topology里面一共有一个spout, 一个bolt。 其中spout的parallelism是2, bolt的parallelism是4, 那么我们可以把这个topology的总工作量看成是6, 那么一共有6个task,那么/tasks/{topology-id}下面一共会有6个以task-id命名的文件,其中两个文件的内容是spout的id, 其它四个文件的内容是bolt的id。

Storm主要应用场景

  • 推荐系统
    在电商系统中,根据客户选择,推荐同类产品感兴趣的内容。

  • 日志监控系统
    实时对日志的响应时间,报错等进行统计和报警

  • 网站访问量等统计。

等等。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值