Storm简介

来源:互联网 发布:淘宝宝贝竖图怎么弄 编辑:程序博客网 时间:2024/06/05 01:04

Storm简介

是Twitter开源的一个分布式实时计算系统,主要用于数据的实时分析,持续计算,分布式RPC等等。具体简介见google,话不多说
Storm特点:

  • 低延迟:实时计算系统必须要有的
  • 高性能:可以使用普通的服务器建立环境,节约成本。
  • 分布式:适合于分布式计算,适合大数据实时分析,群狼战猛虎
  • 可扩展:就是说可以增加机器等了,支持水平扩展
  • 容错:分布式系统的通用问题,一个节点挂了也不会影响到整体的计算,并且在节点重启的时候,能够投入到生产环境,自动平衡任务
  • 可靠性:可靠的消息处理。storm保证每个消息至少能得到一次完整处理,任务失败时,他会负责从消息源重试消息。
  • 快速:系统的设计保证了消息能得到快速的处理。使用ZeroMQ作为其底层消息队列。
  • 本地模式:storm有一个“本地模式”,方便测试,快速开发
  • 可以用很多种语言进行开发。

storm主要架构

hadoop和storm结构简单对比

/ hadoop storm 系统角色 JobTracker Nimbus 系统角色 TaskTracker Supervisor 系统角色 Child Worker 应用名称 Job Topology 组件接口 Mapper/Reducer Spout/Bolt

系统架构
storm架构

  • Nimbus主节点
    主节点通常运行一个后台程序-Nimbus, 负责资源分配和任务调度。这个很类似于Hadoop中的Job Tracker。
  • Supervisor工作节点:
    工作节点同样会运行一个后台程序-Supervisor,用于接收工作指派的任务, 管理所有Worker,一个Supervisor节点中包含多个Worker进程。

  • Zookeeper
    Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现是的逻辑则被封装到Storm中的toplogy.toplogy则是一组有spouts(数据源)和Bolts(数据操作)通过Stream Groupings 进行连接的图,例如如图,下面是对属于进行更深刻的解析

Topology(拓扑)

上面这一整张图在一起就是一个Topology, 因为各个组件间的消息流动形成逻辑上的一个拓扑结构,一个Topology是spouts
和bolts组成的图,通过stream groupings 将途中的spouts和bolts连接起来,如下图

spout-flow

Spout:

数据源(Spout)就是上面的水龙头,是数据流的来源。根据需求的不同,Spout 既可以定义为可靠的数据源,也可以定义为不可靠的数据源。一个可靠的 Spout 能够在它发送的元组处理失败时重新发送该元组,以确保所有的元组都能得到正确的处理;相对应的,不可靠的 Spout 就不会在元组发送之后对元组进行任何其他的处理。一个 Spout 可以发送多个数据流。

Bolt

用于处理数据的,将数据流拿过来处理后,再次丢给下一个bolt或者直接结束。如果需求比较复杂,则需要使用多个 Bolt并且多个步骤完成

Stream Grouping

这里先简单介绍一下,具体的之后会有详解

  • Shuffle Grouping: 随机分组, 随机派发stream里面的tuple, 保证每个bolt接收到的tuple数目相同。轮询,平均分配
  • Fields Grouping:按字段分组, 比如按userid来分组, 具有同样userid的tuple会被分到相同的Bolts, 而不同的userid则会被分配到不同的Bolts。
  • All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到。
  • Global Grouping: 全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。
  • Non Grouping: 不分组, 这个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果,不平均分配。
  • Direct Grouping: 直接分组 略!
    其中前三种比较常见。这里并不细讲

操作模式

  • 本地模式
    Storm 拓扑结构运行在本地计算机的单一 JVM 进程上, 一般用于开发和调试,类似于hadoop本地调试一样的
  • 集群模式:
    Storm 群提交拓扑,它通常由许多机器共同合作完成
原创粉丝点击