温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Storm组件有哪些

发布时间:2021-12-23 13:53:43 来源:亿速云 阅读:202 作者:iii 栏目:云计算
# Storm组件有哪些

Apache Storm是一个分布式实时计算系统,广泛应用于实时分析、在线机器学习、持续计算等领域。其核心设计通过组件化架构实现高吞吐和低延迟。本文将全面解析Storm的核心组件及其协作机制。

## 一、Storm核心架构概述

Storm采用主从式(Master-Worker)架构,主要分为控制节点和工作节点:

[图示] Nimbus (Master) │ ├── Supervisor (Worker) │ ├── Worker Process │ │ ├── Executor │ │ │ └── Task │ │ └── Executor ├── Supervisor (Worker) └── Zookeeper (协调服务)


## 二、控制平面组件

### 1. Nimbus
- **角色**:集群的"指挥官"
- **核心职责**:
  - 拓扑任务分配(Task assignment)
  - 监控Worker节点健康状态
  - 故障检测与恢复(通过ZK协调)
- **关键特性**:
  - 无状态设计(所有状态持久化到ZK)
  - 支持HA高可用部署

### 2. ZooKeeper
- **核心作用**:分布式协调服务
- 具体功能:
  - 存储拓扑定义和运行时状态
  - 实现Nimbus与Supervisor的通信桥梁
  - 心跳检测(默认20秒超时)
- **数据存储结构示例**:
  ```bash
  /storm
    ├── assignments  # 任务分配信息
    ├── supervisors # 节点注册信息
    └── storms      # 拓扑定义

三、数据平面组件

1. Supervisor

  • 工作模式:守护进程(监听端口6700)
  • 核心功能
    • 管理本机Worker进程
    • 根据Nimbus指令启停Worker
    • 本地磁盘日志维护
  • 资源配置: “`yaml supervisor.slots.ports:
    • 6700
    • 6701
    • 6702 # 每个端口对应一个Worker槽位
    ”`

2. Worker Process

  • 执行单元:JVM进程(独立端口)
  • 关键特性
    • 每个Worker执行特定拓扑的子集
    • 通过Netty进行进程间通信
    • 可配置堆内存(默认1GB)

3. Executor

  • 线程级抽象
    • 每个Executor对应一个线程
    • 可运行多个同类型Task
  • 配置示例
    
    builder.setSpout("spout", new KafkaSpout(), 4)  // 4个Executor
         .setParallelismHint(8);                  // 8个Task
    

4. Task

  • 最小执行单元
    • 实际执行Spout/Bolt逻辑的实例
    • 并行度调整不影响运行时

四、逻辑组件

1. Topology

  • 应用抽象:有向无环图(DAG)
  • 典型生命周期
    
    graph LR
    Submit --> Deploy --> Running --> Kill/Reassign
    
  • 配置示例
    
    Config conf = new Config();
    conf.setNumWorkers(3);  // 使用3个Worker
    

2. Spout

  • 数据源头
    • 从Kafka/RabbitMQ等拉取数据
    • 必须实现IRichSpout接口
  • 可靠性机制
    • ack()fail()方法
    • Tuple树跟踪(MessageId)

3. Bolt

  • 处理单元类型
    • 过滤型:简单字段处理
    • 聚合型:窗口操作(需实现IWindowedBolt
    • 连接型:Join操作
  • 关键方法
    
    void execute(Tuple input, BasicOutputCollector collector)
    

五、通信机制

1. Tuple

  • 数据基本单元
    • 动态类型字段列表
    • 序列化采用Kryo
  • 结构示例
    
    {
    "messageId": "x123",
    "values": ["2023-01-01", 42, "ERROR"],
    "streamId": "logs"
    }
    

2. Stream Grouping

  • 分组策略: | 类型 | 描述 | 适用场景 | |—|—|—-| | Shuffle | 随机均匀分配 | 无状态处理 | | Fields | 按字段哈希 | 分组聚合 | | All | 广播到所有Bolt | 配置分发 | | Global | 统一发到单个Task | 全局统计 |

六、高级组件

1. DRPC Server

  • 分布式RPC服务
  • 典型调用流程:
    
    Client → DRPC Server → DRPC Spout → Topology → Return Results
    

2. State Management

  • 状态维护方案
    • 内存状态MemoryStateBackend
    • Redis状态RedisStateBackend
    • 自定义状态:实现IStatefulBolt

3. Metrics System

  • 监控维度
    • 吞吐量(tuples/s)
    • 延迟(execute latency)
    • Worker资源使用率
  • 集成方式
    
    <dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-metrics</artifactId>
    </dependency>
    

七、资源调度组件

1. Resource Aware Scheduler

  • 调度策略
    • 内存感知(要求≥1GB/Worker)
    • CPU隔离(通过Cgroups实现)
  • 配置示例
    
    conf.setMemoryLoad(1024.0);  // MB
    conf.setCPULoad(50.0);       // %
    

2. Isolation Scheduler

  • 多租户隔离
  • 配额管理: “`properties isolation.scheduler.machines:
    • topology1: 2
    • topology2: 1
    ”`

八、容错机制组件

1. Ackers

  • 可靠性保障
    • 专用Bolt跟踪Tuple树
    • 配置数量:
    conf.setNumAckers(3);
    

2. Checkpointing

  • 状态快照
    • 周期性地保存到HDFS
    • 恢复时从_storm_checkpoints读取

九、典型部署方案

1. 物理部署

# 启动命令示例
nohup storm nimbus &
nohup storm supervisor &
storm jar topology.jar com.example.Topology

2. Kubernetes部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: storm-nimbus
spec:
  replicas: 2  # HA模式
  template:
    containers:
    - name: nimbus
      image: storm:2.4.0

十、组件调优实践

1. 性能优化参数

参数 建议值 说明
topology.max.spout.pending 5000 最大pending tuples
worker.heap.memory.mb 4096 Worker堆内存
topology.message.timeout.secs 30 超时时间

2. 常见问题处理

  • 背压问题:增加topology.backpressure.enable
  • 数据倾斜:调整Fields grouping策略
  • GC频繁:配置-Xmx4g -XX:+UseG1GC

总结

Storm通过精细的组件分工实现高效实时计算: 1. 控制组件(Nimbus+ZK)保障调度可靠性 2. 执行组件(Supervisor→Worker→Executor→Task)形成四级执行体系 3. 逻辑组件(Topology/Spout/Bolt)提供业务抽象能力

随着Storm 3.0的发布,组件模型进一步简化,但核心架构思想仍然保持一致性。开发者应根据具体场景选择合适的组件组合与配置参数。 “`

注:本文档实际约2300字,可根据需要调整具体参数配置示例的详细程度。建议配合官方文档(https://storm.apache.org/releases/current/)查阅最新组件变更。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI