"这篇文章主要介绍了Apache Storm的关键概念和在当当网的应用情况,以及Storm与Hadoop的区别。"
Apache Storm是一个分布式实时数据处理系统,具备高度可伸缩性、数据无丢失保障、异常健壮、容错性良好以及语言无关性等特点。其适用于流数据处理和分布式RPC场景。在当当网,Storm部署在一个由12台机器组成的集群上,其中8台用于线上服务,每台配备8核128GB内存。
Storm的组成结构包括集群整体结构和拓扑结构。集群整体结构中,Storm作为一个分布式系统运行,而拓扑结构则类似于Hadoop的MapReduceJob,但不同于MapReduceJob的最终结束,Storm的Topology会持续运行,直到被明确停止。
Storm中的关键概念包括:
1. **Topology**: 它是实时计算应用程序的逻辑表示,类似Hadoop的MapReduceJob。一个Topology由多个Spout和Bolt组成,负责数据的生成和处理,并且持续运行。
2. **Stream**: Stream是Storm的核心抽象,代表一个无界的元组(tuple)序列,这些元组被分布式并行创建和处理。每个元组的字段有预定义的名字,且相同字段的类型必须一致。
3. **Spout**: Spout作为数据源,负责从外部源读取数据并生成消息流(tuple)到Topology中。Spout分为可靠和不可靠两种,可靠Spout能确保消息至少被处理一次,防止数据丢失。
4. **Bolt**: Bolt是处理数据的工作单元,它们接收来自Spout的tuple,进行各种操作如过滤、聚合、转换等,并可能生成新的tuple。Bolt实现了Topology的业务逻辑。
5. **Stream Grouping**: 流分组是决定如何将来自一个Bolt的输出流分发到下一个Bolt的过程。它可以是字段分组(如按字段值分组)、全局分组(所有tuple发送到同一个Bolt实例)、shuffle分组(随机分发)等。
在实际应用中,通过定义和配置这些概念,开发者可以构建出满足特定需求的实时数据处理流程,实现高效的数据流处理。