《Storm分布式实时计算模式》——1.4 Storm的并发机制

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介:

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

1.4 Storm的并发机制

在Storm的间接中提到过,Storm计算支持在多台机器上水平扩容,通过将计算切分为多个独立的tasks在集群上并发执行来实现。在Storm中,一个task可以简单地理解为在集群某节点上运行的一个spout或者bolt实例。
为了理解storm的并发机制是如何运行的,我们先来解释下在集群中运行的topology的四个主要组成部分:

  • Nodes(服务器):指配置在一个Storm集群中的服务器,会执行topology的一部分运算。一个Storm集群可以包括一个或者多个工作node。
  • Workers(JVM虚拟机):指一个node上相互独立运行的JVM进程。每个node可以配置运行一个或者多个worker。一个topology会分配到一个或者多个worker上运行。
  • Executeor(线程):指一个worker的jvm进程中运行的Java线程。多个task可以指派给同一个executer来执行。除非是明确指定,Storm默认会给每个executor分配一个task。
  • Task(bolt/spout实例):task是spout和bolt的实例,它们的nextTuple()和execute()方法会被executors线程调用执行。

1.4.1 WordCountTopology的并发机制
到目前为止,在单词计数的示例中没有明确使用任何Storm中并发机制的API,而是让Storm使用默认配置。在大多数情况下,除非明确指定,Strom的默认并发设置默认是1。
在我们修改topology的并发度之前,先来看默认配置下topology是如何执行的。假设我们有一台服务器(node),为topology分配了一个worker,并且每个executer执行一个task。我们的topology执行过程如图1-3所示:


66bdf6d0c4791f7185d12a063e4c1893847b8c98

正如在图中看到的,唯一的并发机制出现在线程级。每个任务在同一个JVM的不同线程中执行。如何增加并发度以充分利用硬件能力?让我们来增加分配给topology的worker和executer的数量。
1.4.2 给topology增加worker
增加额外的worker是增加topology计算能力的简单方法。为此Storm提供了API和修改配置项两种修改方法。无论采取哪种方法,spout和bolt组件都不需要做变更,可以直接复用。
在单词计数topology前面的版本中,我们引入了Config对象在发布时传递参数给submitTopology()方法,但是没有做更多配置操作。为了增加分配给一个topology的worker数量,只需要简单的调用一下Config对象的setNumWorkers()方法:

2ab8235bebaa010fcce67cf5e4749064a6bdbf98

这样就给topology分配了两个worker而不是默认的一个。从而增加了topology的计算资源,也更有效的利用了计算资源。我们还可以调整topology中的executor个数以及每个executor分配的task数量。
1.4.3 配置executor和task
我们已经知道,Storm给topology中定义的每个组件建立一个task,默认的情况下,每个task分配一个executor。Storm的并发机制API对此提供了控制方法,允许设定每个task对应的executor个数和每个executor可执行的task的个数。
在定义数据流分组时,可以设置给一个组件指派的executor的数量。为了说明这个功能,修改topology的定义代码,设置SentenceSpout并发为两个task,每个task指派各自的executor线程。

090a2973e3f243d8fc270a63736bffb5c70ebe74

如果只使用一个worker,topology的执行如图1-4所示。
下一步,我们给语句分割bolt SplitSentenceBolt设置4个task和2个executor。每个executor线程指派2个task来执行(4/2=2)。还将配置单词计数bolt运行四个task,每个task由一个executor线程执行:

c2805a5ff5b30b786b55bcad9ac422a39836990b

在2个worker的情况下,topology执行如图1-5所示。
增加了topology并发后,运行更新过的WordCountTopology类,每个单词的计数比原topology要多:


24990be6fa7e7d964d559e0b89fb925cb0d52842


<a href=https://yqfile.alicdn.com/0e31d5ae76314f1cefdda3cd81516ef173294f39.png
" >

spout在topology关闭之前会一直发射数据,单词的计数值取决于计算机的速度,是否有其他程序在运行。总量上看发射和处理的单词增多了。
要重点指出的是,当topology执行在本地模式时,增加worker的数量不会达到提高速度的效果。因为topology在本地模式下是在同一个JVM进程中执行的,所以只有增加task和executor的并发度配置才会生效。Storm的本地模式提供了接近集群模式的模拟,对开发是否有帮助。但程序在投入生产环境之前,必须在真实的集群环境下进行测试。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
20天前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用合集之是否可以支持只读模式的数据库
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
20天前
|
消息中间件 资源调度 Java
实时计算 Flink版产品使用合集之部署yarn模式,怎么实现峰谷动态并行度扩容缩容
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
23天前
|
关系型数据库 分布式数据库 数据库
【PolarDB开源】PolarDB-X源码解读:分布式事务处理机制揭秘
【5月更文挑战第20天】PolarDB-X,PolarDB家族的一员,专注于大规模分布式事务处理,采用2PC协议保证ACID特性。源码解析揭示其通过预提交、一致性快照隔离和乐观锁优化事务性能,以及利用事务日志进行故障恢复。深入理解其事务处理机制对开发者掌握分布式数据库核心技术至关重要。随着开源社区的发展,更多优化方案将涌现,助力构建更强大的分布式数据库系统。
102 6
|
26天前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用合集之本地local模式下断点续传可以操作吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
26天前
|
Oracle NoSQL 关系型数据库
实时计算 Flink版产品使用合集之MongoDB CDC connector的全量快照功能可以并发读取吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1天前
|
分布式计算 负载均衡 并行计算
Python 分布式计算框架 PP (Parallel Python):集群模式下的实践探索
该文介绍了使用Parallel Python (PP) 在两台物理机上构建分布式计算集群的经验。PP是一个轻量级框架,旨在简化Python代码在多处理器系统和集群中的并行执行。文中通过设置子节点的IP、端口和密钥启动PP服务器,并在主节点创建PP实例进行负载均衡。实验使用官方的质数和计算示例,显示PP在集群模式下能有效利用多台机器的多核CPU,实现计算效率的显著提升。未来,作者计划进一步研究PP在更复杂任务和大规模集群中的应用潜力。
|
6天前
|
负载均衡 并行计算 Java
分布式系统中,利用并行和并发来提高整体的处理能力
分布式系统中,利用并行和并发来提高整体的处理能力
|
9天前
|
负载均衡 运维 监控
负载均衡与容错性:集群模式在分布式系统中的应用
本文由小米分享,解释了分布式系统中的集群模式。集群模式是通过组合多个服务器节点,共同提供服务,实现高可用性、负载均衡和扩展性。文章介绍了主控节点的角色及其高可用性策略,如主备模式和选举机制,并以Zookeeper为例详细阐述了其工作机制。集群模式的优势在于高可用性、负载均衡、扩展性和数据一致性,但也面临节点通信、数据一致性、故障检测和管理等挑战。最后,作者鼓励读者讨论和交流相关技术问题。
169 5
|
12天前
|
分布式计算 Hadoop 大数据
分布式计算框架比较:Hadoop、Spark 与 Flink
【5月更文挑战第31天】Hadoop是大数据处理的开创性框架,专注于大规模批量数据处理,具有高扩展性和容错性。然而,它在实时任务上表现不足。以下是一个简单的Hadoop MapReduce的WordCount程序示例,展示如何统计文本中单词出现次数。
49 0
|
14天前
|
Java Maven 流计算
在Docker跑通Flink分布式版本的WordCount
在Docker跑通Flink分布式版本的WordCount
20 0