Storm笔记

流计算概念

实时获取来自不同数据源的海量数据经过实时分析处理,获得有价值的信息。

流计算基本理念

  • 数据的价值会随着时间的流逝而降低
  • 流计算处理引擎应该满足低延迟、可扩展、高可靠

流计算系统要求

高性能、海量式、实时性、分布式、易用性、可靠性

Storm

  • 可以简单、高效、可靠地处理流数据,支持多种编程语言,处理非常灵活
  • 可以非常方便地与现有的数据库系统产品进行融合,从而开发出非常强大的实时计算系统

Stream

  • Storm将流数据Stream描述成一个无限的Tuple序列,这些Tuple序列会以分布式的方式并行地创建和处理
  • 每个tuple是一堆值,每个值都有一个名字,并且每个值可以是任何类型
  • Tuple本来应该是一个Key-Value的Map,但是由于各个组件之间传递的tuple的字段名称已经事先定义好了,所以tuple只需要按序填入各个Value,所以是一个Value List。

Spout

  • Storm认为每个Stream都有一个源头,并且把则会个源头抽象为Spout
  • 通常Spout会从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,发送到Stream中
  • Spout是一个主动的角色,在接口内部有个nextTuple函数,Storm框架会不停地调用该函数

Bolt

  • Storm将Stream的状态转换过程抽象为Bolt
  • Bolt既可以处理Tuple,也可以将处理后的Tuple作为新的Streams发送给其他Bolt
  • Bolt可以执行过滤、函数操作、Join、操作数据库等任何操作
  • Bolt是一个被动的角色,其接口中有一个execute(Tuple input)方法,在接收到消息后会调用此函数,用户可以在此方法中执行自己的处理逻辑
  • 总的来说Bolt的作用是:处理Tuples、创建Streams
  • 往往是多个Bolt一起完成整个流处理

Topology

类似于Hadoop中的job

Stream Groupings

  • ShuffleGrouping,随机分组,随机分发Stream中的Tuple,保证每个Bolt的Task接收Task接收Tuple的数量大致相等
  • FieldsGrouping,按照字段分组,保证相同字段的Tuple分配到同一个Task中
  • AllGrouping,广播发送,每一个Task都会收到所有的Tuple
  • NonGrouping,不分组,和ShuffleGrouping类似,当前Task的执行会和它的订阅者在同一个线程中执行
  • DirectGrouping,直接分组,直接指定由某个Task来执行Tuple的处理
  • GlobalGrouping,全局分组,所有的Tuple都发送到同一个Task中

Storm框架设计

在这里插入图片描述

  • Storm集群采用“Master-Worker”的节点方式
  • Master节点运行名为“Nimbus”的后台程序(类似于Hadoop中的“JobTracker”),负责在集群范围内分发代码,为Worker分配任务和监测故障
  • Worker节点运行名为“Supervisor”的后台程序,负责监听分配给他所在机器的工作,即根部Nimbus分配的任务来决定或启动Worker进程,一个Worker节点上同时运行若干个Worker进程
  • Storm使用Zookeeper来作为分布式协调组件,负责Nimbus和多个Supervisor之间的所有协调工作

在这里插入图片描述

  • 借助于Zookeeper,如果Nimbus进程或者Supervison进程意外终止,重启时也能读取、恢复之前的状态,并继续工作,使Storm极其稳定
    在这里插入图片描述
  • Executor,executor是产生于worker进程内部的线程,会执行同一个组件的一个或者多个task,通常来说,task会由并发数指定,而executor的数目会小于task数目,这很合理
  • 实际的数据处理由Task完成

在这里插入图片描述

注:本内容为听课笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值