Storm是一个分布式实时数据处理系统,由LinkedIn公司开源,旨在处理大规模、不断流动的数据。其设计初衷是为了应对实时计算的需求,具备高度可伸缩性、数据完整性保障、异常健壮性和容错性,支持多种编程语言。
在Storm的架构中,核心概念包括:
1. **Topology**:这是Storm中的核心元素,代表一个实时计算应用程序的逻辑。每个Topology是无限运行的,类似于Hadoop MapReduce Job,但区别在于MapReduce Job有明确的开始和结束,而Topology是持续处理数据流。用户可以通过定义和配置topology来实现复杂的数据处理流程。
2. **Stream**:在Storm中,消息流是非常重要的抽象,它是无界的数据序列,由一系列tuple组成。Tuple是数据的基本单元,每个字段都有名字,并且字段类型在整个流中必须保持一致。Stream的并行处理能力使得Storm能够高效处理大量数据。
3. **Spout**:作为消息源,Spout负责从外部源头读取数据并生成tuple,然后将其发送到Topology中。Spout可以是可靠的,这意味着如果数据源出现问题,它可以重试或者保证数据的顺序;也可以是非可靠的,数据可能不会按照特定的顺序到达。
4. **Bolt**:Bolt是Topology中的处理单元,接收到Spout发送的tuple后进行计算和处理。Bolt可以连接多个上游Spout或下游Bolt,形成复杂的处理管道。Bolt是编写业务逻辑的主要部分,可以根据需求进行定制和扩展。
5. **Stream Grouping**:这是一种机制,用于指定Bolt如何接收来自Spout的数据。常见的Stream Grouping类型包括All grouping(所有tuple分发给同一个Bolt)、Shuffle grouping(随机分发tuple到Bolt)、Direct grouping(tuple根据key值直接路由)等,选择合适的grouping方式直接影响处理性能和负载均衡。
除了上述组件,Storm集群的整体结构包含了一组部署在多台机器上的节点,每台机器通常具有高性能配置,如多核处理器和大内存,以支持并行处理。在当当网的应用中,Storm集群有12台机器,其中8台用于生产环境,4台用于测试,每台机器配置强大,确保了系统的稳定性和处理能力。
Storm是一个强大的实时数据处理工具,通过其组件和集群结构,为企业提供了实时、弹性和高吞吐量的数据处理解决方案。它的设计灵活性和扩展性使其在流式数据处理和分布式RPC场景中有广泛应用。