Apache Storm是一个分布式、可靠、容错的实时流式数据处理的系统。在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology)。这个拓扑将会被提交给集群,由集群中的主控节点(master node)分发代码,将任务分配给工作节点(worker node)执行。一个拓扑中包括spout和bolt两种角色,其中spout发送消息,负责将数据流以tuple元组的形式发送出去;而bolt则负责转换这些数据流,在bolt中可以完成计算、过滤等操作,bolt自身也可以随机将数据发送给其他bolt。由spout发射出的tuple是不可变数组,对应着固定的键值对。
图1 Storm系统架构
业务处理逻辑被封装进Storm中的Topology中。一个Topology是由一组Spout组件(数据源)和Bolt组件(逻辑处理)通过Stream Groupings进行连接的有向无环图(DAG)。Topology里面的每一个Component(Spout/Bolt)节点都是并行运行的。在Topology里面,可以指定每个节点的并行度,Storm则会在集群里面分配相应的Task来同时计算,以增强系统的处理能力。
图2 Topology
Storm有众多适用场景:实时分析、持续计算、分布式ETL等。Storm有如下几个特点:
适用场景广泛
易扩展,可伸缩性高
保证无数据丢失
容错性好
易于构建和操控
多语言
Storm作为计算平台,在业务层为用户提供了更为易用的业务实现方式:CQL(Continuous Query Language—持续查询语言)。CQL具有以下几个特点:
使用简单:CQL语法和标准SQL语法类似,只要具备SQL基础,通过简单地学习,即可快速地进行业务开发。
功能丰富:CQL除了包含标准SQL的各类基本表达式等功能之外,还特别针对流处理场景增加了窗口、过滤、并发度设置等功能。
易于扩展:CQL提供了拓展接口,以支持日益复杂的业务场景,用户可以自定义输入、输出、序列化、反序列化等功能来满足特定的业务场景
易于调试:CQL提供了详细的异常码说明,降低了用户对各种错误的处理难度。