我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeeper上面写状态信息来分配任务,supervisor,task通过从zookeeper中读状态来领取任务,同时supervisor, task也会定义发送心跳信息到zookeeper, 使得nimbus可以监控整个storm集群的状态, 从而可以重启一些挂掉的task。ZooKeeper 使得整个storm集群十分的健壮 — 任何一台工作机器挂掉都没有关系,只要重启然后从zookeeper上面重新获取状态信息就可以了。本文主要介绍Twitter Storm在ZooKeeper中保存的数据目录结构,源代码主要是: backtype.storm.cluster, 废话不多说,直接看下面的结构图:
一个要注意的地方是,作者在代码里面很多地方用到的storm-id
, 其实就是topology-id
的意思。我在邮件列表里面问了他一下, 他说以前他把topology叫做storm, 代码里面还没有改过来。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/-{storm-zk-root} -- storm在zookeeper上的根
| 目录
|
|-/assignments -- topology的任务分配信息
| |
| |-/{topology-id} -- 这个下面保存的是每个
| topology的assignments
| 信息包括: 对应的
| nimbus上的代码目录,所有
| task的启动时间,
| 每个task与机器、端口的映射
|
|-/tasks -- 所有的task
| |
| |-/{topology-id} -- 这个目录下面id为
| | {topology-id}的topology
| | 所对应的所有的task-id
| |
| |-/{task-id} -- 这个文件里面保存的是这个
| task对应的component-id:
| 可能是spout-id或者bolt-id
|
|-/storms -- 这个目录保存所有正在运行
| | 的topology的id
| |
| |-/{topology-id} -- 这个文件保存这个topology
| 的一些信息,包括topology的
| 名字,topology开始运行的时
| 间以及这个topology的状态
| (具体看StormBase类)
|
|-/supervisors -- 这个目录保存所有的supervisor
| | 的心跳信息
| |
| |-/{supervisor-id} -- 这个文件保存的是supervisor
| 的心跳信息包括:心跳时间,主
| 机名,这个supervisor上worker
| 的端口号运行时间
| (具体看SupervisorInfo类)
|
|-/taskbeats -- 所有task的心跳
| |
| |-/{topology-id} -- 这个目录保存这个topology的所
| | 有的task的心跳信息
| |
| |-/{task-id} -- task的心跳信息,包括心跳的时
| 间,task运行时间以及一些统计
| 信息
|
|-/taskerrors -- 所有task所产生的error信息
|
|-/{topology-id} -- 这个目录保存这个topology下面
| 每个task的出错信息
|
|-/{task-id} -- 这个task的出错信息
|
相关推荐
而Storm利用内存中的数据结构进行处理,具有更低的延迟。 - **容错机制**:Hadoop依赖于HDFS的副本机制实现容错,而Storm则采用了基于内存的状态管理,能够更快地恢复故障。 - **应用场景**:Hadoop更适合于离线数据...
在分布式计算领域,Zookeeper和Storm是两个非常关键的组件,它们在大数据处理和实时计算中扮演着核心角色。Zookeeper是一个高可用的分布式协调服务,而Storm则是一个分布式实时计算系统。 Zookeeper的主要功能包括...
源代码目录`nathanmarz-storm-9a3e1ec`中包含了Storm的主要组件和模块: - **storm-core**:Storm的核心库,包括了拓扑结构定义、调度器、心跳机制、错误处理等功能。 - **storm-client**:客户端API,用于提交拓扑...
本文档是关于Storm源码的详细走读笔记,主要分析了Storm的启动场景、Topology提交过程、worker进程中的线程使用情况、消息传递机制以及 TridentTopology的创建和ack机制等多个方面。 首先,文档提到了Storm集群中的...
总的来说,分析Apache Storm 0.9.5的源码,我们可以深入了解其设计思想、内部机制和实现细节,这对于开发者在实际项目中优化性能、解决故障、定制功能都有极大的帮助。同时,这也为理解后续版本的改进和发展提供了...
这个版本可能包含了源代码、文档、示例以及编译和部署所需的配置文件,供开发者研究和使用。通过深入研究这些代码和文档,开发者可以更深入地理解Storm的工作原理,并利用它来构建自己的实时数据处理系统。
这个版本可能包含了源代码、文档、示例和其他资源,方便开发者学习和使用Storm。 详细知识点: 1. **实时数据处理**:Storm的核心特性是实时流处理,它允许数据一进入系统就立即被处理,而不是像批处理那样等到...
"nathanmarz-storm-9a3e1ec" 这个文件名可能指的是Nathan Marz的个人Storm分支的一个特定版本,9a3e1ec可能是Git仓库中的一个提交哈希,代表了该版本的源代码快照。这个版本可能包含了Storm的某些特定改进或修复。 ...
Storm是一个开源的分布式实时计算系统,由Twitter开发并开源,其设计目标是让实时处理变得简单、强大且可靠。在Storm中,数据流被抽象为持续不断的Tuple(元组)序列,这些Tuple在网络中的worker节点间进行分布式...
在"storm-starter-master"这个项目中,通常会包含一系列的示例,如简单的单词计数(WordCount)、日志分析等,这些示例有助于初学者理解如何在Storm中创建拓扑结构(Topology)并部署运行。每个示例都会展示如何定义...
开发者可以找到丰富的学习资料和源代码来加深对Storm的理解和应用。随着大数据技术的发展,Storm作为实时计算领域的主流框架之一,其应用现状和发展趋势也愈发引人注目。开发者在使用Storm时,不仅需要掌握其基础...
这个名为"apache-storm-2.1.0.tar.gz"的压缩包包含了Apache Storm的2.1.0版本,这是一个非源码的发行版,意味着它包含了编译后的二进制文件,可以直接在Linux环境中运行。该版本是由Apache软件基金会维护的,最初由...
- **Spout**:数据源,负责从外部源(如Kafka、Twitter等)拉取或接收数据,并将数据发布到Storm的各个工作节点。 - **Bolt**:处理组件,执行数据清洗、聚合、过滤等操作。 2. **实时处理**:Storm的强项在于...
源码版本的Apache Storm允许开发者查看和修改源代码,以便进行以下操作: - **自定义行为**:根据特定需求调整核心组件或实现新的功能。 - **性能优化**:分析和改进代码以提高处理速度或降低资源消耗。 - **调试和...
在Storm中使用Kafka作为数据源或数据接收器时,你需要导入Kafka的客户端库,它包含了连接到Kafka集群所需的类和方法。这些JAR通常包括`kafka-clients.jar`,包含了消费者和生产者的API。 2. **Storm JAR包**: ...
- **Zookeeper**:用于协调集群中各个组件的状态,例如任务分配信息、心跳检测以及元数据信息等。 **1.3 并发度** 在 Storm 中,用户可以指定每个 Spout 和 Bolt 的并发度,即运行这些组件的 Task 的数量。并发度...
- **编译打包**:将源代码编译成JAR文件,通常会包含拓扑结构、依赖库等。 - **配置参数**:根据实际需求,配置拓扑运行参数,如worker数量、执行器(Executor)线程数等。 - **提交Job**:通过命令行工具`storm ...
Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比Hadoop之于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的...
在Apache Storm中,拓扑(Topology)是核心概念之一,它定义了数据流的处理逻辑。一个拓扑由多个 bolts(处理组件)和 spouts(数据源)组成,通过流(Stream)相互连接。Spouts负责从外部源(如消息队列或数据库)...