Skip to main content

分布式并行Storm

分布式并行 Storm

storm: 专门做流式处理

定义好拓扑之后, 源发数据, 中间节点处理输入流, 发射输出流, 然后给输入的应答表示处理完毕

其他集群的监控管理等都类似另外几个分布式框架

Storm uses tuples as its data model. A tuple is a named list of values, and a field in a tuple can be an object of any type. Out of the box, Storm supports all the primitive types, strings, and byte arrays as tuple field values. To use an object of another type, you just need to implement a serializer for the type.

Every node in a topology must declare the output fields for the tuples it emits.

Storm has two modes of operation: local mode and distributed mode. In local mode, Storm executes completely in a process by simulating worker nodes with threads. Local mode is useful for testing and development of topologies.

元数据管理是用的zookeeper

1. Storm 的核心概念和组件:

  • 问题: Storm 的核心概念是什么?它与其他流处理系统有何不同?
  • 答案: Storm 的核心概念是将流式计算抽象为有向无环图 (DAG),称为拓扑 (Topology)。拓扑由 Spout 和 Bolt 组成,Spout 负责数据源的接入,Bolt 负责数据的处理和转换。与其他流处理系统相比,Storm 强调低延迟、高吞吐量和容错性。
  • 问题: 解释 Storm 中的 Spout 和 Bolt 的作用,并举例说明它们之间的关系。
  • 答案: Spout 是数据源的接入点,负责从外部系统读取数据并将其转换为 Tuple 发送到拓扑中。Bolt 负责处理 Spout 发送的 Tuple,可以进行各种操作,例如过滤、聚合、转换等,并将结果发送到下游的 Bolt 或输出到外部系统。例如,一个 Spout 可以从 Kafka 读取数据,然后将数据发送到一个 Bolt 进行过滤,过滤后的数据再发送到另一个 Bolt 进行聚合。
  • 问题: Storm 的拓扑是如何构建和部署的?
  • 答案: 拓扑的构建通常使用 Java 或其他 JVM 语言编写代码,定义 Spout 和 Bolt 的逻辑,以及它们之间的连接关系。部署拓扑时,需要将代码打包成 JAR 文件,并提交到 Storm 集群。

2. Storm 的架构和工作流程:

  • 问题: 描述 Storm 的架构,包括 Nimbus、Supervisor 和 Worker 的作用。
  • 答案: Storm 采用主从架构,Nimbus 是主节点,负责资源调度和任务分配。Supervisor 是从节点,负责启动和监控 Worker 进程。Worker 进程运行在 Supervisor 节点上,负责执行 Spout 和 Bolt 的任务。
  • 问题: Storm 的消息传递机制是如何工作的?如何保证消息的可靠性?
  • 答案: Storm 使用 ZeroMQ 或 Netty 进行消息传递,Tuple 在拓扑中以消息的形式进行传递。Storm 通过 Acker 机制来保证消息的可靠性,每个 Tuple 都会被跟踪,如果 Tuple 未被成功处理,则会重新发送。
  • 问题: Storm 如何实现容错性?
  • 答案: Storm 通过 Nimbus 和 Supervisor 的心跳机制来监控集群的健康状态。如果 Worker 进程或 Supervisor 节点出现故障,Nimbus 会将任务重新分配到其他可用的节点上。

3. Storm 的性能和调优:

  • 问题: 影响 Storm 性能的关键因素有哪些?
  • 答案: 影响 Storm 性能的关键因素包括拓扑的复杂度、数据量、消息传递的效率、Worker 进程的数量等。
  • 问题: 如何对 Storm 进行性能调优?
  • 答案: 可以通过调整 Worker 进程的数量、调整拓扑的并行度、优化 Spout 和 Bolt 的代码、使用更高效的消息传递机制等方式来提高 Storm 的性能。

4. Storm 的应用场景:

  • 问题: Storm 适用于哪些类型的应用场景?
  • 答案: Storm 适用于需要实时处理大量数据的场景,例如实时数据分析、实时监控、欺诈检测、推荐系统等。
  • 问题: 请对比 Storm 与其他流处理框架(如 Spark Streaming 和 Flink)的优缺点,并说明 Storm 的适用场景。
  • 答案: Storm 强调低延迟,适用于对延迟要求非常高的场景。Spark Streaming 基于微批处理,延迟较高,但吞吐量更大。Flink 支持 exactly-once 语义,适用于需要精确处理的场景。选择哪个框架取决于具体的应用需求。