最近团队中有分析的场景,用到了JStorm来做数据的实时分析,于是花时间对于一些概念做了了解。
什么是Storm?
这个的话出来应该有几年时间了,阿里巴巴也重写了一套JStorm,核心的类名都是服用的Storm的,他是一套实时数据处理系统,容错行好,然后足够稳定,目前很多数据实时分析的场景,选择Storm的越来越多了。
核心概念介绍
Nimbus:负责在集群里面发送代码,分配工作给机器,并且监控状态。全局只有一个。相当于master的角色。
Supervisor:监听分配给它那台机器的工作,根据需要启动/关闭工作进程Worker。每一个要运行Storm的机器上都要部署一个,并且,按照机器的配置设定上面分配的槽位数。
zookeeper:Storm重点依赖的外部资源。Nimbus和Supervisor甚至实际运行的Worker都是把心跳保存在Zookeeper上的。Nimbus也是根据Zookeerper上的心跳和任务运行状况,进行调度和任务分配的。两者之间的调度器。
Spout:在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。
Bolt:在一个topology中接受数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被动的角色,其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。
Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
Worker:具体处理组建逻辑的进程,
Task:不再与物理进程对应,是处理任务的线程,
Stream:源源不断传递的tuple就组成了stream。
Tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list.
整体物理布局
放一张Nimbus和Supervisior的关系图
数据处理的流程
Topology是一个完成的数据处理流程,在Nimbus提交jar,然后Nimbus分发到Supervisior中,Sport负责数据流的读入,是入口,然后Bolt是处理数据加工数据的节点,中间数据被封装在Tuple中,然后Bolt节点可以产生新的Tuple。总体流程图如下
Storm如何保证消息被最终处理
总体的流程介绍,首先Spout发完tuple后发送一条Ack消息给Acker线程,告诉Acker自己发送了哪些tuple需要ack,每一个Bolt 的 task 在执行完对tuple的处理之后,需要手动的ack一下,ack的时候发送一条Ack消息给Acker线程,告知自己要ack的tuple和需要下面的节点ack的tuple,当Acker收到所有的ack的时候就向Spout发送一条ack消息,通知这棵树上的tuple被完整的处理了。
每当一个Spout发送出一个tuple,就会在拓扑中产生了一棵由tuple构成的树,Jstorm中为每棵树设置了一个rootID来唯一的标示这棵树。
Storm如何存储数据
严格来讲,Storm中设计的组建,没有专门存储数据的,一般情况下,会借助第三方的存储,例如mysql、Nosql 等,Bolt的节点,可以用于存储计算的中间结果或者最终结果。
从这里看,Storm在取舍上拿捏的恰到好处,发挥里实时处理数据的核心场景。
Spout和Bolt为啥需要实现序列化
这两个核心的接口,都实现了序列化,在开发web类系统的时候,一般接口或者操作类,是没有必要实现序列化接口的,这里为啥需要呢。
深入理解一些Storm的机制,一个topology程序提交到集群,是先提交到Nimbus的,然后由其进行分发,分发是跨进程的,到了另外一个进程中,是需要反序列化出来这个处理类的。
Storm中的grouping机制有那些
一个 Bolt 可以设置为多个 Task 并发执行数据处理任务,订阅了一个 Spout 的 Stream,那么应该把 Spout 的数据发送给哪一个具体的Task执行,这个是由grouping的方式决定的。
1、随机分组,伪随机,按照一定的逻辑均匀的分发
2、特定字段分组
3、真正的随机分组
4、广播,每个都发一遍
5、直接制定那个任务接收
事务拓扑是怎么回事
事务拓扑,保证流入拓扑的数据能够被完整的处理且处理一次;
Acker拓扑,保证流入拓扑的数据能够被完整的处理,但不保证不重复;
普通拓扑,不保证流入拓扑的数据能够被完整的处理;
如何测试这种编程模型的系统呢
简单想了一些测试的思路,这种实时处理,数据是流动的,测试难度比较大
1、验证数据,截取特定时间点的分析结果数据快照,然后利用这些时间在离线的分析集群里面对照写分析逻辑,看结果是否一致;
2、验证数据分析处理逻辑,中间的Bolt阶段,涉及到数据的加工分析以及过滤,可以mock数据输入,验证计算逻辑是否准确;
3、测试环境下,模拟有可能异常的业务数据,流入系统,看系统的容错机制如何;
Spout如何获取数据
1、直接链接,Spout作为数据输入的源头,启动线程直接链接对应的数据源,拉取特定条件的数据;
2、通过队列过度,不是直接的方式,通过消息队列来进行过度;
3、外部系统通知,消息系统通知到Spout,然后转换为Tuple进行传输;
实时计算业务场景举例
1、日志分析
例如应用系统产生大量的业务日志,这些例如网关系统的API调用情况日志,这些日志,不太适合马上存入数据库,需要进行加工,日志文件的量又非常大,所以没法直接统计,这时候可以通过Storm来进行分析。
2、大数据实时统计
互联网的数据量是海量的时候,没有办法在数据库层面直接SQL来进行统计,需要对于产生的数据,进行二次加工,然后产出结果,正好把实时变化的数据流到storm中处理一遍。
3、管道传输
例如有数据需要从A系统流道B系统,这时候需要中间处理一下,场景是不是很切和。
参考文章:
http://storm.apache.org/documentation/Concepts.html
http://tech.uc.cn/?p=2159
http://xumingming.sinaapp.com/category/storm/
http://www.searchtb.com/2012/09/introduction-to-storm.html
相关推荐
#### 四、Storm核心组件详解 - **Nimbus**:Nimbus是Storm集群的核心组件之一,负责整个集群的管理和协调工作,包括任务调度、故障恢复等。Nimbus通过Zookeeper来实现状态同步和集群协调。 - **Supervisor**:...
Apache Storm是一个分布式的实时...以上内容整合了Storm的核心概念、组件、关键机制和高级特性。这些知识点是Storm用户在构建实时大数据处理应用时必须要掌握的,以便于更有效地设计和部署复杂的分布式实时计算系统。
Storm分布式实时计算模式由Apache Storm 项目核心贡献者吉奥兹、奥尼尔亲笔撰 写,融合了作者丰富的Storm实战经验,通过大量示例,全面而系统地讲解使用Storm进行分布式实 时计算的核心概念及应用,并针对不同的应用...
Topology是Storm中的核心概念,它定义了数据如何在Spout和Bolt之间流动。在这个案例中,我们可以创建一个`WordCountTopology`,其中包含一个Spout和两个Bolt,用DAG(有向无环图)的形式连接它们:Spout -> ...
此外,Hadoop的编程模型基于JobTracker和TaskTracker,而Storm采用的是Topology概念,包含Nimbus、Supervisor、Worker、Spout和Bolt等组件。 Nimbus是Storm的作业调度器,类似于Hadoop的JobTracker,负责分配任务到...
首先,Storm的核心概念包括Spout(数据源)和Bolt(数据处理组件)。Spout负责从数据源接收数据,如Kafka或RabbitMQ,然后Bolt对数据进行处理,例如清洗、转换或聚合。在整合Druid的过程中,我们可以设计一个Storm...
消息传递机制是Storm中的核心概念之一。在Storm中,Tuple的接收和发送使用了一种称为disruptor的高性能内存队列。Tuple接收过程包括worker创建接收线程、从socket接收消息、disruptor在线程间传递消息以及消息被...
本笔记主要围绕Storm的核心概念、起源、架构、组件、原理以及应用场景进行详细讲解。 **一、Storm概念** Storm设计的目标是使实时数据处理变得简单易用,它可以连续处理无限的数据流,提供低延迟和高吞吐量的处理...
### Hadoop Hive HBase Spark Storm概念详解 #### Hadoop **Hadoop** 是一个由Apache基金会开发的开源分布式系统基础架构。它通过提供一个高效、可靠且可扩展的平台来解决大数据存储与处理的需求。Hadoop的核心组件...
Storm的工作原理基于一个核心概念:Topology(拓扑)。在Storm中,Topology是一个实时计算应用程序的封装,它会持续运行直到被用户停止。Topology由Spouts和Bolts组成,Spouts负责数据源,可以产生源数据流,而Bolts...
**二、Storm核心概念** 2.1 **拓扑(Topology)**:在Storm中,拓扑是数据处理逻辑的定义,由多个 bolts 和 spouts 组成。Bolts负责处理数据,而Spouts则负责生成数据流。 2.2 **Bolt**:Bolt是Storm处理逻辑的核心...
在使用 Storm 进行实时数据处理时,开发者需要理解以下几个核心概念: - **拓扑(Topology)**:定义了数据流的处理逻辑,由 Bolt 和 Spout 组成。 - **Spout**:数据源,负责读取和分发数据。 - **Bolt**:数据处理...
1. **Apache Storm核心概念**: - **Topology**:Storm中的计算逻辑单位,由Spouts和Bolts组成,负责数据流的处理。 - **Spout**:数据源,负责从外部源(如Kafka、Twitter等)拉取或接收数据,并将数据发布到...
2. **拓扑结构**:Storm的核心概念是拓扑(Topology),它由多个 bolt 和 spout 组成,它们通过流(Stream)连接。Bolt 负责处理逻辑,而 Spout 作为数据源,负责产生数据流。在demo中,我们将看到如何定义简单的...
对照学习能够帮助读者更好地理解和掌握Storm的核心概念和技术细节。 **标签解析:** "实时大数据"标签表明Storm主要用于处理大数据的实时分析。在大数据领域,实时性是关键,Storm能够实时处理数据流,这对于需要...
它的核心概念是拓扑(Topology),通过定义数据流的处理逻辑,实现了高可用、可扩展的数据处理能力。在开发Storm应用时,我们通常需要导入相关的JAR包,这些JAR包包含了Storm运行所需的各种组件和库。 首先,我们来...
书中可能会深入讲解Storm的拓扑结构、Spout和Bolt的概念、容错机制以及如何与其他系统如Hadoop、Cassandra等集成。 2. **Apache Spark**:Spark是一个通用的并行计算框架,尤其在批处理和交互式数据分析方面表现...
Storm的核心概念包括: 1. **Spout**:数据源,负责产生数据流。可以是任何数据源,如数据库、消息队列等。 2. **Bolt**:数据处理组件,执行实际的业务逻辑,如清洗、聚合、过滤等操作。 3. **Topology**:拓扑结构...
Storm的核心概念包括拓扑(Topology)、 bolt(业务逻辑处理)和spout(数据源)。用户定义的Bolt处理数据,Spout源源不断地从数据源读取数据,形成数据流,然后由Bolt进行处理。 Kafka是LinkedIn开源的一个高吞吐...