您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Storm基本概念是什么
## 一、Storm概述
Apache Storm是一个开源的分布式实时计算系统,由Nathan Marz团队于2011年创建,后成为Apache顶级项目。它能够可靠地处理无界数据流(即持续不断产生的数据),适用于实时分析、在线机器学习、持续计算等场景。
### 核心特性
- **低延迟**:毫秒级响应能力
- **高容错**:自动处理节点故障
- **可扩展**:线性扩展能力
- **保证数据不丢失**:精确一次(exactly-once)处理语义
## 二、核心架构组件
### 1. Topology(拓扑)
Storm的核心计算单元,是由Spout和Bolt组成的**有向无环图(DAG)**。一个拓扑持续运行直到显式终止。
```java
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new RandomSentenceSpout(), 5);
builder.setBolt("split", new SplitSentenceBolt(), 8).shuffleGrouping("spout");
builder.setBolt("count", new WordCountBolt(), 12).fieldsGrouping("split", new Fields("word"));
数据流的源头,通常从消息队列(如Kafka)或数据库读取数据。常见实现:
- KafkaSpout
:从Kafka消费数据
- DRPCSpout
:用于分布式RPC
数据处理单元,可执行: - 过滤(Filtering) - 聚合(Aggregation) - 连接(Joins) - 数据库交互等操作
public class WordCountBolt extends BaseBasicBolt {
private Map<String, Integer> counts = new HashMap<>();
public void execute(Tuple tuple, BasicOutputCollector collector) {
String word = tuple.getString(0);
counts.merge(word, 1, Integer::sum);
collector.emit(new Values(word, counts.get(word)));
}
}
概念 | 说明 |
---|---|
Tuple | 基本数据单元,包含命名字段列表 |
Stream | 由相同字段结构的Tuple组成的序列 |
Stream ID | 多流场景下的标识符(默认”default”) |
决定Tuple如何路由到Bolt:
分组类型 | 描述 |
---|---|
Shuffle Grouping | 随机均匀分发(负载均衡) |
Fields Grouping | 按指定字段哈希分发(相同字段值到同一任务) |
All Grouping | 广播到所有下游任务 |
Global Grouping | 全部发送到同一个任务(通常是ID最小的) |
Direct Grouping | 由发送方指定目标任务 |
// 可靠处理示例
collector.emit(tuple, new Values(word)); // 锚定到输入tuple
collector.ack(tuple); // 显式确认
角色 | 职责 |
---|---|
Nimbus | 主节点,负责拓扑提交、任务分配(类似Hadoop的JobTracker) |
Supervisor | 工作节点,管理Worker进程 |
Worker | 实际执行任务的JVM进程(每个Worker运行特定拓扑的部分任务) |
ZooKeeper | 协调集群状态,实现Nimbus与Supervisor的解耦 |
通过以下参数组合决定实际并发:
- Worker数量:Config.setNumWorkers()
- Executor数量:组件并行度参数
- Task数量:setNumTasks()
(默认等于Executor数)
特性 | Storm | Spark Streaming | Flink |
---|---|---|---|
处理模型 | 原生流处理 | 微批处理 | 原生流处理 |
延迟 | 毫秒级 | 秒级 | 毫秒级 |
状态管理 | 需自行实现 | 内置 | 完善的内置支持 |
语义保证 | At-least-once | Exactly-once | Exactly-once |
成熟度 | 高 | 高 | 快速发展中 |
实时监控系统
金融风控
物联网(IoT)
推荐系统
Storm 2.0(2019年发布)重大改进:
Trident:Storm的高级抽象
TridentTopology topology = new TridentTopology();
topology.newStream("spout", spout)
.groupBy(new Fields("word"))
.persistentAggregate(new MemoryMapState.Factory(), new Count(), new Fields("count"));
Storm作为最早的实时计算系统之一,虽然面临Flink等新框架的竞争,但其简单直接的编程模型和经过验证的稳定性,使其在特定场景仍具优势。理解其核心概念有助于根据业务需求选择合适的流处理技术。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。