《Storm分布式实时计算模式》——2.1 Storm集群的框架

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

本节书摘来自华章计算机《Storm分布式实时计算模式》一书中的第2章,第2.1节,作者:(美)P. Taylor Goetz Brian O’Neill 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第2章 配置Storm集群

在本章中你将深入理解Storm的技术栈,它的软件依赖,以及搭建和部署Storm集群的过程。我们首先会在伪分布式模式下安装Storm,所有的组件都安装在同一台机器上,而不是在多台机器上。一旦你了解了安装和配置Storm的基本步骤,我们就可以通过Puppet这个工具进行自动化的安装,这样的话部署多节点的集群可以节省大量的时间和精力。
本章包括以下内容:

  • 组成Storm集群的不同组件和服务
  • Storm的技术栈
  • 在Linux上安装和配置Storm
  • Storm的配置参数
  • Storm的命令行接口
  • 使用服务提供工具Puppet进行自动安装

2.1 Storm集群的框架

Storm集群遵循主/从(master/slave)结构,和Hadoop等分布式计算技术类似,语义上稍有不同。主/从结构中,通常有一个配置中静态指定或运行时动态选举出的主节点。Storm使用前一种实现方式。主/从结构中因为引入了单点故障的风险而被诟病,我们会解释Storm的主节点是半容错的。
Storm集群由一个主节点(称为nimbus)和一个或者多个工作节点(称为supervisor)组成。在nimbus和supervisor节点之外,Storm还需要一个Apache ZooKeeper的实例,ZooKeeper实例本身可以由一个或者多个节点组成。如图2-1所示。


<a href=https://yqfile.alicdn.com/12cb188dcbf5407b9b205dcfac49195ea0e677c7.png" >

nimbus和supervisor都是Storm提供的后台守护进程,可以共存在同一台机器上。实际上,可以建立一个单节点伪集群,把nimbus、supervisor和ZooKeeper进程都运行在同一台机器上。
2.1.1 理解nimbus守护进程
nimbus守护进程的主要职责是管理,协调和监控在集群上运行的topology。包括topology的发布,任务指派,事件处理失败时重新指派任务。
将topology发布到Strom集群,将预先打包成jar文件的topology和配置信息提交(submitting)到nimbus服务器上。一旦nimbus接收到了topology的压缩包,会将jar包分发到足够数量的supervisor节点上。当supervisor节点接收到了topology压缩文件,nimbus就会指派task(bolt和spout实例)到每个supervisor并且发送信号指示supervisoer生成足够的worker来执行指派的task。
nimbus记录所有supervisor节点的状态和分配给它们的task。如果nimbus发现某个supervisor没有上报心跳或者已经不可达了,它会将故障supervisor分配的task重新分配到集群中的其他supervisor节点。
前面提到过,严格意义上讲nimbus不会引起单点故障。这个特性是因为nimubs并不参与topology的数据处理过程,它仅仅是管理topology的初始化,任务分发和进行监控。实际上,如果nimbus守护进程在topology运行时停止了,只要分配的supervisor和worker健康运行,topology一直继续数据处理。要注意的是,在nimbus已经停止的情况下supervisor异常终止,因为没有nimbus守护进程来重新指派失败这个终止的supervisor的任务,数据处理就会失败。
2.1.2 supervisor守护进程的工作方式
supervisor守护进程等待nimbus分配任务后生成并监控workers(JVM进程)执行任务。supervisor和worker都是运行在不同的JVM进程上,如果由supervisor拉起的一个woker进程因为错误(或者因为Unix终端的kill-9命令,Window的tskkill命令强制结束)异常退出,supervisor守护进程会尝试重新生成新的worker进程。
看到这里你可能想知道Storm的有保障传输机制如何适应其容错模型。如果一个worker甚至整个supervisor节点都故障了,Storm怎么保障出错时正在处理的tuples的传输?
答案就在Storm的tuple锚定和应答确认机制中。当打开了可靠传输的选项,传输到故障节点上的tuples将不会收到应答确认,spout会因为超时而重新发射原始tuple。这样的过程会一直重复直到topology从故障中恢复开始正常处理数据。
2.1.3 Apache ZooKeeper简介
ZooKeeper使用一个简单的操作原语集合和分组服务,在分布式环境下提供了集中式的信息维护管理服务。它是一种简单但功能强大的分布式同步机制,允许客户端的应用程序监控或者订阅数据集中的部分数据,当数据产生,更新或者修改时,客户端都会收到通知。使用常见的ZooKeeper模式或方法,开发者可以实现分布式计算所需要的很多种机制,比如Leader选举,分布式锁和队列。
Storm主要使用ZooKeeper来协调一个集群中的状态信息,比如任务的分配情况,worker的状态,supervisor之间的nimbus的拓扑度量。nimbus和supervisor节点之间的通信主要是结合ZooKeeper的状态变更通知和监控通知来处理的。
Storm对ZooKeeper的使用相对比较轻量化,不会造成很重的资源负担。对于重量级的数据传输操作,比如发布topology时传输jar包,Storm依赖Thirft进行通信。我们将会看到,topology组件之间的数据传输(最影响效率的地方)是在底层进行的,并且经过了性能优化。
2.1.4 Storm的DRPC服务工作机制
Storm应用中的一个常见模式期望将Storm的并发性和分布式计算能力应用到“请求-响应”范式中。一个客户端进程或者应用提交了一个请求并同步地等待响应。这样的范式可能看起来和典型topology的高异步性、长时间运行的特点恰恰相反,Storm具有事务处理的特性来实现这种应用场景,如图2-2所示。


5dbc136a16bbe42164bfe283cad141e26f2122a0

为了实现这个功能,Storm将额外的服务(Storm DRPC)以及spout和bolt整合在一起工作,提供了可扩展的分布式RPC能力。
DRPC功能是完全是可选的,当Storm集群中的应用有使用这个功能时,DRPC服务节点才是必须的。
2.1.5 Storm UI
Storm UI也是可选功能,非常有用,会提供一个基于Web的GUI来监控Storm集群,对正在运行的topology有一定的管理功能。Storm UI提供了已经发布的topology的统计信息,对监控Storm集群的运转和topology的功能有很大帮助,如图2-3所示。


<a href=https://yqfile.alicdn.com/1efd747bc6c4146a092e5a7ff476da7966ae25ca.png" >

Storm UI只能报告由nimubs的trhift API获取的信息,不会影响到topology上其他功能。Storm UI可以随时开关而不影响任何topology的运行,在那里它完全是无状态的。它还可以用配置来进行一些简单的管理功能,如开启、停止、暂停和重新均衡负载topology。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
74 3
|
2月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
57 0
|
2月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
70 0
|
2月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
85 0
|
24天前
|
机器学习/深度学习 自然语言处理 并行计算
DeepSpeed分布式训练框架深度学习指南
【11月更文挑战第6天】随着深度学习模型规模的日益增大,训练这些模型所需的计算资源和时间成本也随之增加。传统的单机训练方式已难以应对大规模模型的训练需求。
79 3
|
26天前
|
监控
Saga模式在分布式系统中保证事务的隔离性
Saga模式在分布式系统中保证事务的隔离性
|
28天前
|
机器学习/深度学习 并行计算 Java
谈谈分布式训练框架DeepSpeed与Megatron
【11月更文挑战第3天】随着深度学习技术的不断发展,大规模模型的训练需求日益增长。为了应对这种需求,分布式训练框架应运而生,其中DeepSpeed和Megatron是两个备受瞩目的框架。本文将深入探讨这两个框架的背景、业务场景、优缺点、主要功能及底层实现逻辑,并提供一个基于Java语言的简单demo例子,帮助读者更好地理解这些技术。
57 2
|
1月前
|
存储 分布式计算 负载均衡
分布式计算模型和集群计算模型的区别
【10月更文挑战第18天】分布式计算模型和集群计算模型各有特点和优势,在实际应用中需要根据具体的需求和条件选择合适的计算架构模式,以达到最佳的计算效果和性能。
54 2
|
13天前
|
SQL 分布式计算 数据处理
Structured Streaming和Flink实时计算框架的对比
本文对比了Structured Streaming和Flink两大流处理框架。Structured Streaming基于Spark SQL,具有良好的可扩展性和容错性,支持多种数据源和输出格式。Flink则以低延迟、高吞吐和一致性著称,适合毫秒级的流处理任务。文章详细分析了两者在编程模型、窗口操作、写入模式、时间语义、API和库、状态管理和生态系统等方面的优劣势。
zdl
|
13天前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
49 0