当前位置: 首页 > 知识库问答 >
问题:

理解Storm建筑

凤明朗
2023-03-14

我一直在努力理解Storm建筑,但我不确定我是否理解正确。我会尽可能准确地解释我认为的情况。请解释一下如果我错了什么是对的。

http://storm.apache.org/releases/2.0.0-SNAPSHOT/Understanding-the-parallelism-of-a-Storm-topology.html这意味着一个工人也是一个过程http://storm.apache.org/releases/2.0.0-SNAPSHOT/Concepts.html然而,对于“工作进程。每个工作进程都是一个物理JVM”http://storm.apache.org/releases/1.0.1/Setting-up-a-Storm-cluster.html表示一个worker是一个带有“Nimbus和worker machines”的节点。网站http://www.michael-noll.com/tutorials/running-multi-node-storm-cluster/提到“主节点”和“工作节点”。那么,工作人员是一个进程还是一个物理节点(或者一个节点是一个进程)?因此,我认为有两件事:工作节点和工作进程。

  • 主节点=管理服务器
  • 工作节点=从节点
  • Nimbus JVM进程,在主节点上运行
  • ZooKeeper JVM进程,在ZooKeeper节点上运行
  • 主管JVM进程,在工作节点上运行
  • 工作进程(JVM),在工作节点上运行
  • 执行器线程,由辅助进程运行
  • 任务(螺栓和喷嘴实例),由执行者执行

Nimbus是一个JVM进程,运行在物理主节点上,它接收我的程序(Storm拓扑),从中获取螺栓和喷嘴并生成任务。如果一个螺栓应该并联三次,光环会为它生成三个任务。Nimbus向ZooKeeper JVM进程询问集群的配置,例如在哪里运行这些任务,ZooKeeper JVM进程告诉Nimbus。为了做到这一点,动物园管理员与管理员进行沟通(他们的情况将在稍后公布)。Nimbus将任务分配给Workers节点,后者是物理节点。工作节点由主管管理,主管是JVM进程——一个工作节点只有一个主管。主管管理(启动、停止等)工作进程,这是在工作节点上运行的JVM进程。每个工作节点都可以运行多个工作进程。工作进程是JVM进程。它们运行一个或多个被称为执行器的线程。每个Executor线程运行一个或多个任务,这意味着螺栓或喷嘴的一个或多个实例,但它们必须是同一个螺栓。

如果这一切都是真的,那就引出了一些问题:

  • 让多个工作进程在一个工作节点上运行有什么意义?毕竟一个进程可以使用多个处理器核,对吗
  • 如果多个任务必须是同一个螺栓/喷嘴,那么由一个执行器线程运行多个任务有什么意义?一个线程只在一个处理器内核上运行,因此多个螺栓/喷嘴必须相互紧跟,不能并行。在Storm拓扑中无限期运行-在Executor线程中有两个相同螺栓/喷嘴的实例有什么意义

编辑:好的附加资源:http://www.tutorialspoint.com/apache_storm/apache_storm_cluster_architecture.htm

共有1个答案

曾苗宣
2023-03-14

首先是一些澄清(基本上你是对的)。

  • 节点和进程这两个词的使用并不总是一致的(不幸的是)。但是你的实体在游戏中是正确的。
  • 关于并行化:任务的数量由. setNum任务()决定--如果没有指定,则与parallelism_hint(设置执行程序的数量)相同。
  • 关于部署:Nimbus从ZK获取集群配置,但ZK不决定在哪里运行任务--Nimbus有一个调度器组件来做出这个决定(基于给定的拓扑、拓扑配置和集群配置)。

回答你的问题:

  • 单个辅助进程只执行单个拓扑中的任务。因此,如果想要运行多个拓扑,就需要多个辅助JVM。这种设计的原因是容错,即拓扑隔离。如果一个拓扑失败(可能是由于用户代码错误),崩溃的JVM不会影响其他正在运行的拓扑
 类似资料:
  • 什么让 topology(拓扑)可以运行: worker 进程, executors(执行器)和 tasks(任务) Storm 区分以下 3 个主要的实体, 它们在 Storm 集群中用于实际的运行 topology(拓扑): Worker 进程 Executors(线程) Tasks 这是一个简单的例子, 以说明他们之间的关系 一个 worker 进程 执行一个 topology(拓扑)的子集

  • 我正在使用从2个Kafka主题中消费,每个主题都有6个分区。喷口进入单个螺栓以解压缩相关字节,然后进入第二个螺栓以进一步处理。 当我看到storm-ui的时候,这些数字没有多大意义,我希望有人能给我一些启示。 > Kafka的口水说它“收集”了3600个元组,失败了73M个元组。再看下一组的螺栓,我看到有的已经顶起了73米,有的已经顶起了1.3米(没有出现故障),而有的已经顶起了1.3米(没有出现

  • 我正在尝试使用Eclipse在Linux中运行Storm启动示例。我收到以下错误和函数从未被调用。 错误: 我的拓扑类: 我正在虚拟机环境中工作,所以不知道这是否是由于安装了Zookeeper。有什么想法吗?

  • 要开发 topology, 您将需要您的类路径上的 Storm jar. 您应该在项目的类路径中包含未打包的 jar, 或者使用 Maven 将 Storm 包含为开发依赖项. Storm 托管在 Maven Central. 要将 Storm 作为开发依赖项包含在项目中, 请将以下内容添加到 pom.xml 中: <dependency> <groupId>org.apache.storm

  • 我需要用Storm处理成批的元组。我的最后一个bolt必须等到拓扑接收到整个批处理之后才能进行一些处理。为了避免混淆--对我来说,批处理是一组N条消息,它们是实时的,这个术语不需要与批处理(Hadoop)联系在一起。即使2条消息也可以是一批。 阅读Storm的文档是否可以说Storm不支持这种批处理(实时的批处理=N条消息)? 所以我的问题是给你们,我亲爱的Storm大师们,这个拓扑是不是设计得很

  • 一、简介 Storm-Redis 提供了 Storm 与 Redis 的集成支持,你只需要引入对应的依赖即可使用: <dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-redis</artifactId> <version>${storm.version}</version> <typ