《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学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
3天前
|
数据库 数据安全/隐私保护
TiDB分布式事务处理机制
【2月更文挑战第28天】TiDB作为开源的分布式HTAP数据库产品,其分布式事务处理机制是其核心功能之一。本章节将深入解析TiDB分布式事务处理机制的工作原理,包括其采用的分布式事务协议、事务的提交与回滚过程、以及如何处理并发事务等关键内容。通过了解TiDB的分布式事务处理机制,我们可以更好地理解其在分布式环境下如何确保数据一致性和事务正确性。
|
3天前
|
SQL 弹性计算 分布式计算
TiDB计算层详解:分布式计算框架与查询优化机制
【2月更文挑战第26天】本文将深入剖析TiDB的计算层,详细解析其分布式计算框架和查询优化机制。通过了解计算层的核心组件和工作原理,我们可以更好地理解TiDB如何高效处理SQL查询和计算任务。本文将从计算层的架构、任务分发、查询优化等方面展开介绍,帮助读者全面掌握TiDB计算层的关键技术和优势。
|
22小时前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用合集之本地local模式下断点续传可以操作吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
20 2
|
1天前
|
SQL 缓存 算法
实时计算 Flink版产品使用合集之可以把初始同步完了用增量模式,但初始数据还是要同步,除非初始的数据同步换成用其他工具先同步过去吧,是这个意思吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
1天前
|
消息中间件 Java 数据库连接
实时计算 Flink版产品使用合集之将sdkMode从rpc模式改为jdbc模式后,table.exec.mini-batch.enabled参数还生效吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
11 0
|
1天前
|
资源调度 Kubernetes Oracle
实时计算 Flink版产品使用合集之三种集群模式各有啥优缺点,生产环境如何选择
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
15 0
|
3天前
|
SQL 算法
基于若依的ruoyi-nbcio流程管理系统修改代码生成的sql菜单id修改成递增id(谨慎修改,大并发分布式有弊端)
基于若依的ruoyi-nbcio流程管理系统修改代码生成的sql菜单id修改成递增id(谨慎修改,大并发分布式有弊端)
14 1
|
3天前
|
缓存 NoSQL Java
【亮剑】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护,如何使用注解来实现 Redis 分布式锁的功能?
【4月更文挑战第30天】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护。基于 Redis 的分布式锁利用 SETNX 或 SET 命令实现,并考虑自动过期、可重入及原子性以确保可靠性。在 Java Spring Boot 中,可通过 `@EnableCaching`、`@Cacheable` 和 `@CacheEvict` 注解轻松实现 Redis 分布式锁功能。
|
3天前
|
存储 NoSQL 分布式数据库
【Flink】Flink分布式快照的原理是什么?
【4月更文挑战第21天】【Flink】Flink分布式快照的原理是什么?
|
3天前
|
运维 监控 Java
面经:Storm实时计算框架原理与应用场景
【4月更文挑战第11天】本文是关于Apache Storm实时流处理框架的面试攻略和核心原理解析。文章分享了面试常见主题,包括Storm的架构与核心概念(如Spout、Bolt、Topology、Tuple和Ack机制),编程模型与API,部署与运维,以及应用场景与最佳实践。通过代码示例展示了如何构建一个简单的WordCountTopology,强调理解和运用Storm的关键知识点对于面试和实际工作的重要性。
39 4
面经:Storm实时计算框架原理与应用场景