Storm核心概念如下:

 1、Tuple:元组
                Tuple即元组,是一个拓扑Topology中的Spout和Bolt组件之间数据传递的基本单元。元组中的字段可以是任何类型的对象,Storm使用元组作为其数据模型,支持所有的基本类型、字符串、和字节数组。
            Spout中nextTuple()方法产生元组通过收集器Collector发射给Bolt,Bolt中execute()方法接收来自Spout发射的元组(订阅Spout中declareOutputFields参数声明的的字段后)后处理或继续发送到下一个Bolt。
            
        2、Stream:流
                Stream即流是Storm的核心抽象,是一个无界的元组序列。源源不断传递的元组就组成了流,在分布式环境中并行的创建和处理。流由元组构成,使用OutputFieldsDeclarer声明流机器模式(直接分组等)。
            流被定义成由元组字段进行命名的方式,默认元组包含整型Integer、长整型Long、短整型Short、字节byte、字符String、双精度浮点型Double、单精度浮点型Float、布尔型Boolean和字节数据Byte[],还可以
            自定义序列化器以便本地元组可以使用自定义类型(自定义序列化必须实现ISerialization接口,然后通过使用CONFIG.TOPOLOGY_SERIALIZATIONS这个配置进行注册使用)。
                Spout是流的源,通常从外部数据源读取数据生成元组并发射到拓扑中。外部数据源包括Kafka、HDFS、HBase、Hive、Redis或Kestrel。
                Bolt接收任何数量的输入流执行处理后,可能结束或生成新的流提交到拓扑,如果生成新的流则需要多个Bolt。Bolt可以执行运行函数、过滤元组、连接流和连接数据库等操作。
                一个拓扑中的每个节点均可并行执行,也可以指定拓扑中跨集群执行的线程数量。一个拓扑会一直执行,直到手动杀死。Storm会重新分配任何失败的任务,如果主机宕机或消息被删除,Storm仍然能保证不
            会有任何数据丢失。
                每个流被声明后都会赋予一个ID,如果是单个流的Spout或Bolt,OutputFieldsDeclarer也能声明一个不指定ID的单流,这种情况下,流被赋予默认的ID值。
                
        3、Spout:喷口
                Spout即喷口是拓扑中流的来源,是一个拓扑中产生源数据流的组件,通常情况下Spout会从外部数据源Kafka、HDFS、HBase、Hive、Redis或Kestrel中读取数据,然后转换为拓扑内部的源数据。Spout支持可
            靠和不可靠两种方式,如果是可靠的Spout遇到处理元组失败会重新发射;不可靠的Spout遇到元组处理失败则跳过。Storm会不停的循环调用Spout中的nextTuple()方法,用户只要在此方法中生成源数据即可。
                Spout支持多个流,可以通过OutputFieldsDeclarer类的declareStream方法来声明多个流,使用SpoutOuputCollector类的emit执行流的提交。Spout的主要方法是nextTuple()方法,nextTuple()方法会产生一
            个或多个Tuple到拓扑中,如果没有新的Tuple则返回。Spout的其他常用方法是ack()和fail()方法,当有新的Tuple从Spout发出时,ack()和fail()会被调用。不可靠的Spout不调用ack()和fail(),可靠的Spout会
            调用ack()和fail()方法。
            
        4、Bolt:螺栓
                Bolt即螺栓,是一个拓扑中流的处理节点,Bolt可以完成过滤、业务处理、连接运算、数据库等操作。Bolt支持多个流,以通过OutputFieldsDeclarer类的declareStream方法来声明多个流,使用
            OuputCollector类的emit指定发射的流。
            
        5、Topology:拓扑
                Topology即拓扑,是Storm中运行的一个实时流数据处理的应用程序,由各个组件间的消息流动而形成逻辑上的拓扑结构。Storm的Topology类似于Hadoop的MapReduce作业,都是打成一个jar包在集群中运行,
            主要区别是MapReduce的Job处理完成后会结束,只有Mapper和Reducer两个组件构成;Storm的Topology永远都在运行直到被强制杀死,由一个Spout和多个Bolt组件构成。
            
        6、Master Node和Worker Node:主控节点和工作节点
                Master Node和Worker Node即主控节点和工作节点,Storm生产环境中的集群分为主控节点和工作节点,其中主控节点只有一个(直到0.9x系列Storm的nimbus仍存在单点故障,不支持HA),而工作节点可以
            有多个。
            
        7、Nimbus和Supervisor:Numbus进程和Supervisor进程
                Nimbus即主控节点上运行的一个守护进程,类似于Hadoop的JobTracker。Numbus进程负责在集群中分发代码、对节点任务分配和监控集群节点故障。Supervisor即工作节点上运行的一个守护进程,类似
            Hadoop中的TaskTracker,Supervisor进程负责监听其主机上以分配的作业,启动和停止Nimbus已经分配的工作进程。
            
        8、Stream Grouping:流分组
                Stream Grouping即流分组,是拓扑中定义的一部分,为每个Bolt指定应该接收哪个流作为输入。流分组定义了流/元组如何在Bolt的任务之间进行分发。Storm内置了7中流分组方式和通过实现
            CustomStreamGrouping接口可以执行自定义的流分组。
            
        9、Worker进程、Task任务、Executor线程
                Worker进程是每个Spout/Bolt中运行具体处理逻辑的进程。每个Worker进程是一个物理的JVM和拓扑中执行所有任务的一个子集。使用Config.TOPOLOGY_WORKERS配置项设置执行拓扑时分配的Worker数量。
                Worker进程中运行的是Executor线程,Executor线程中运行的是Spout/Bolt实例。

10、Reliability:可靠性
                    
Storm通过将每个Spout发射的元祖记录在的一个元祖树中,然后监控每个Spout的元组树并检测树中的元祖什么时候会成功完成。每个拓扑都有消息超时时间,如果Storm在超时之前未能检测到Spout元祖处理完成则
                会把元祖置为失败并会重新发射它。

Storm概念介绍的更多相关文章

  1. Storm概念、原理详解及其应用(一)BaseStorm

    本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数“wordcount” ...

  2. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  3. Linux LVM硬盘管理之一:概念介绍

    一.LVM概念介绍: LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻 ...

  4. Java SE/ME/EE的概念介绍

    转自 Java SE/ME/EE的概念介绍 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. ...

  5. rocketMq概念介绍

    rocketMq官网 http://rocketmq.apache.org/ rocketMq逻辑概念介绍 rocketMq逻辑图 备注:    改图片分享自李占卫的网上家园 说明: 在rocketM ...

  6. java 并发多线程 锁的分类概念介绍 多线程下篇(二)

    接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...

  7. Airflow Python工作流引擎的重要概念介绍

    Airflow Python工作流引擎的重要概念介绍 - watermelonbig的专栏 - CSDN博客https://blog.csdn.net/watermelonbig/article/de ...

  8. spring batch (一) 常见的基本的概念介绍

    SpringBatch的基本概念介绍 内容来自<Spring Batch 批处理框架>,作者:刘相. 一.配置文件 在项目中使用spring batch 需要在配置文件中声明: 事务管理器 ...

  9. helm-chart-1-简单概念介绍-仓库搭建-在rancher上的使用

    简单的概念介绍: Chart是helm管理的应用的打包格式,一个chart对应一个或一套应用.内部是一系列的yaml描述文件,以为为yaml 服务的文件. 三个部分,helm .tiller.repo ...

随机推荐

  1. 源代码解读Cas实现单点登出(single sign out)功能实现原理--转

    关于Cas实现单点登入(single sing on)功能的文章在网上介绍的比较多,想必大家多多少少都已经有所了解,在此就不再做具体介绍.如果不清楚的,那只能等我把single sign on这块整理 ...

  2. 帧动画 AnimationDrawable

    Drawable Animation(Frame Animation):帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果. 首先,在res/drawable中定义动画 < ...

  3. adb服务无法启动

    今天学习android编程发现调试出错 The connection to adb is down, and a severe error has occured. You must restart ...

  4. MySQL安装与测试

    工作室老师要求我们把MySQL装出来 今天折腾了下,本来不难的,不知道为什么用最新5.6.24的msi安装包,安装的时候选完路径后就没有后续了..蛋疼的我试了好几次,用cmd命令测试一直是 2003- ...

  5. C#面向对象的一些笔记

    抽象 抽象类通常表示一个抽象的概念,提供一个继承的出发点.当设计抽下类时候,尽可能的拥有更多的相同代码,更少的数据. 抽象类.方法用abstract关键字修饰: 抽象成员不能是private. 抽象类 ...

  6. centos安装vim以及设置

    原文链接:http://www.xiaohuai.com/2884 Centos里的VI只默认安装了vim-minimal-7.x.所以无论是输入vi或者 vim查看文件,syntax功能都无法正常启 ...

  7. 三维FEM的刚度矩阵数量级

    刚刚在调试三维的FEM代码,随手把全局刚度矩阵在FULL的情况下保存到了dat文件里. 注意,这个仅仅是一个半径为十的球的刚度矩阵 居然3.6G!!吓坏了!!截个图,留个纪念.还是老老实实用spars ...

  8. C++拾遗(十二)C++代码重用

    “has-a”关系 通常有两种方法实现: 1.被包含,本身是另一个类的对象. 2.私有或者保护继承. 主要讨论第二种方法,在继承时使用private关键字(或者不用任何关键字,默认就是私有的). 使用 ...

  9. 控件真的很好用,突然感觉自己以前研究Discuz!NT366源码的方式很2了

    控件真的很好用,突然感觉自己以前研究Discuz!NT366源码的方式很2了,就是按钮上的或其他控件上的图片哪里去了?

  10. JavaScript forEach方法

    最近看了一些html5和js方面的书,受益匪浅,因为看的东西比较多,却都没有怎么静心来做整理,慢慢来吧,可能最近自己有点儿小紧张.今天跟大家分享下JavaScript的forEach方法(其实是从&l ...