【十八掌●武功篇】第十三掌:Storm之基础知识

这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:这里写图片描述大数据技术●降龙十八掌


一、 Storm简介

1、 介绍

Storm是一个分布式的实时计算系统,用来可靠地处理持续不断的数据流。
Storm可以应用到很多场景中,包括实时分析、在线机器学习、连续计算等。
Strom的处理速度非常快,而且是可伸缩、容错的系统,并且可以保证每一条数据被妥善处理。

2、 Storm框架核心

Storm框架的核心由7个部分组成:

(1) Topology

一个Topology是一个有向无环图,每个节点包含处理逻辑,节点之间的链接显示的是数据应该如何在节点之间传递。

(2) Stream

流是Storm的核心抽象,一个流是一个无界的持续的Tuple格式数据序列,在Topology中有向无环流淌。

(3) Spout

Spout是Topology的数据来源,Spout从外部读取数据,转换为Tuple,提交到Topology中进行计算。Spount可以有多个输出。

(4) Bolt

Topology中所有的处理都在Bolt中完成,Bolt可以进行过滤、业务处理、连接运算、连接、访问数据库等操作。Bolt也可以有多个输出。

(5) Stream Grouping (流分组)

Stream Grouping是定义在Bolt任务中应该如何分区。Storm有七个内置的流分组方式:

  • Shuffle Grouping(随机分组)
  • Fields Grouping(字段分组)
  • All Grouping(全部分组)
  • Global Grouping(全局分组)
  • None Grouping(无分组)
  • Direct Grouping(直接分组)
  • Local or Shuffle Grouping(本地或者随机分组)

(6) Task

在一个线程上执行的一次Spout或者Bolt是一次Task,每个Spout或者Bolt在集群上对应很多Task,一个线程也可以顺序地执行很多Task,但是一个线程同时执行执行一个Task。

(7) Worker

3、 Storm的优势

(1) 集成了多种技术

Storm集成了多种消息队列和数据库。消息队列有:RabbitMQ/AMQP、Kafka、Kestrel、JMS。

(2) 简单的API

Storm中只有三个抽象类型:Spout、Bolt、Topology。
Storm有一个本地模式,用户可以在进程里模拟一个Storm集群进行测试。

(3) 可扩展

Topology是并行计算的,Topology的不同部分都可以指定并行度。

(4) 容错性好

当Worker死亡,Storm会自动在其他节点上重启他们。Storm的守护进程Nimbus和Supervisor被设计为无状态和快速失败的,所以当他们死亡时可以会重启。

(5) 保证数据被成功处理

Storm能保证每一个Tuple都能被完全处理,怎么处理由用户代码控制。如果中间失败了,Storm负责从消息源重新处理消息。

(6) 可以使用任何语言

Storm的核心是定义和提交一个Topology的Thrift定义,而Thrift可以用任何语言。

(7) 部署和操作简答

集群易于部署,仅需要少量的安装和配置就可以部署完毕

(8) 代码开源

二、 Storm基本知识

1、 基本概念

(1) Tuple

Tuple是Storm中消息传递的基本单元,是一个命名的值列表。也可以理解为是一种数据表达格式。
举例:[“id”:1,”name”:”zhangsan”,”isdel”:true]
Storm中的Tuple中支持所有的基本类型、字符串、字节数组作为字段值。
Topology中的每个节点必须声明emit的元组输出字段名称。

(2) Stream

Stream是Storm的核心抽象,是一个无界的元组序列,源源不断传递元组组成了流,在分布式环境中并行地进行创建和处理。

(3) Topology

Topology是Storm中运行的一个实时应用程序,这个应用程序由Spout和Bolt形成的节点和Stream流形成的边组成了逻辑上的拓扑结构。

(4) Spout

Spout是Topology中流的来源,是一个Topology中产生数据流的组件,Spout从外部读取数据,转为为Tuple,交予Topology中其他的Bolt进行处理。
Spout分为可靠的和不可靠的,可靠的Spout是当Storm处理Tuple失败后能够重新发射数据,进行再次处理,而不可靠的Spout一次发射后就会丢掉Tuple,不能重新发射Tuple。
Spout是主动去读取数据的,它有一个nextTuple方法,Storm框架会不停地调用这个方法,用户只要在这个方法中生成数据就可以了。

(5) Bolt

Bolt是Topology中进行业务逻辑处理的节点,Bolt可以完成过滤、业务处理、连接、访问数据库等操作。
Bolt是一个被动的角色,在Bolt接收到消息后就会调用它的execute()方法,用户可以在execute()中写自己的业务逻辑代码。

(6) Nimbus

Nimbus是Storm集群中主控节点上运行的守护进程,负责在集群中分发代码,进行任务分配,监视故障。

(7) Supervisor

Supervisor是Storm集群中工作节点上运行的守护进程,接收Nimbus上分配的任务,启动和停止Nimbus已经分配的任务。

(8) Stream Grouping

流分组定义了流如何在Bolt的任务之间进行分发。

(9) Worker

Worker是一个运行Topology的进程。

(10) Task

线程上运行一个Spout/Bolt就是一个Task。一个线程可以顺序执行多个Spout/Blot,但同一时间一个线程只能运行一个Task。

(11) Executor

一个线程是一个Executor。

2、 并行

(1) 两种并行

Storm有两个层次的并行:Worker层次的进程并行、executor线程的并行。

指定Worker并发数
topologyConf.setNumWorkers(2);
这个是指定Topology任务由两个进程执行。
指定executor并发数
builder.setBolt(SPLITBOLT_ID, new MySplitBolt(),3).shuffleGrouping(SPOUT_ID);
这个是配置Bolt由三个线程执行。
builder.setBolt(SPLITBOLT_ID, new MySplitBolt(),3).setNumTasks(12).shuffleGrouping(SPOUT_ID);
这个是指Bolt由三个线程执行12个Bolt任务,也就是每个线程顺序地执行4个Task

(2) 并行再平衡

Storm有个很好的特性是可以增加或者减少Worker、Executor的数量而不用重新启动集群或者Topology,这样的行为成为再平衡。

有两种方式可以实现Topology再平衡:

  • 使用Storm Web UI。
  • 使用CLI工具

举例说明用CLI再平衡:
$ storm rebalance mytopology –n 5 –e myspout=3 –e mybolt=10
这个是用命令修改mytopology这个Topology使用5个Worker进程,myspout 这个Spout节点使用3个Executor,mybolt这个Bolt节点使用10个Executor。

3、 消息可靠性保障机制

Storm能保证每个来自于Spout的消息都被完全处理。

(1) 完全处理的含义

Spout产生的Tuple消息传递给后面的Bolt,然后Bolt再传递后面的Bolt,当所有的Bolt的都成功处理了Tuple消息,Storm就认为是已经完全处理了。 当消息在指定时间内没有处理完毕,则认为是处理失败。

(2) 实现

Storm保证每一个Tuple将被Topology完全地可靠处理,它可以跟踪每一个Tuple。实现过程是,在Bolt成功处理后,调用ack()方法通知Storm已经成功处理,否则Storm认为Tuple没有被成功处理,当所有的Bolt都报告成功后,Storm才认为这个Tuple被成功处理,这样就实现了对每一个Tuple的可靠处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值