一、Storm相关术语
- 1、Nimbus:Strom集群主节点,负责资源分配和任务调度。
- 2、Supervisor:Storm集群工作节点,接受Nimbus分配任务,管理Worker。
- 3、Worker:独立的JVM进程,每个节点上可以配置运行一个或多个worker。一个Topology会分配到一个或者多个worker上运行。
- 4、Executor:指一个Worker的JVM进程中运行的Java线程,一个Executor可以执行多个Task。Storm默认会给每个Executor分配一个Task。
- 5、Task:Spout和Bolt的实例,他们的nextTuple和execute方法会被Executors调用执行。
- 5、Topology:实时计算逻辑,计算拓补,由Spout和Bolt组成的图状结构。
- 6、Spout:Storm编程模型中的消息源,可进行可靠传输(ack/fail机制)
- 7、Bolt:Storm编程模型中的处理组件,定义execute方法进行实际的数据逻辑处理。可以用于:
- 过滤
- 连接(join)和聚合操作(aggregation)
- 计算
- 数据库读写
- 8、Stream:Stream是由无限制的Tuple组成的序列。
- 9、Tuple:Storm的核心数据结构,是包含了一个或多个键值对的列表。(和Map类似,开发中需要根据key,获得value)
0x01: Storm的分组策略
二、Storm原理架构
-
1、Storm集群架构图
-
2、数据处理流程图
-
3、拓补图分析
三、Storm主要特点
- 1、简单的编程模型:Spout + Bolt
- 2、高拓展性
- 3、高可靠性:消息以消息树的形式存在,提供ack/fail消息保证机制
- 4、高容错性:
- 节点级别的容错
- worker级别的容错
- nimbus不支持容错
- 5、支持多语言编程
- 6、支持本地模式
- 7、高性能:内部通讯采用ZeroMQ通讯,保证消息被快速处理
四、Storm的拓展:与Yarn结合
- 1、资源的弹性计算
- 2、共享底层存储
- 3、支持多版本共存
- 4、整体架构的统一
五、Storm的现状与发展趋势
- Storm的应用场景:
- 1、流式数据处理(数据预处理、ETL等)
- 2、并行计算Top N(按字段分组计算top,然后全局汇总)
- 3、微批处理(在时间窗口内进行批量处理)
- 4、分布式并行计算
优点
在Storm和JStorm出现以前,市面上出现很多实时计算引擎,但自Storm和JStorm出现后,基本上可以说一统江湖: 究其优点:
- 开发非常迅速:接口简单,容易上手,只要遵守Topology、Spout和Bolt的编程规范即可开发出一个扩展性极好的应用,底层RPC、Worker之间冗余,数据分流之类的动作完全不用考虑
- 扩展性极好:当一级处理单元速度,直接配置一下并发数,即可线性扩展性能
- 健壮强:当Worker失效或机器出现故障时, 自动分配新的Worker替换失效Worker
- 数据准确性:可以采用Ack机制,保证数据不丢失。 如果对精度有更多一步要求,采用事务机制,保证数据准确。
- 实时性高: JStorm 的设计偏向单行记录,因此,在时延较同类产品更低
应用场景
JStorm处理数据的方式是基于消息的流水线处理, 因此特别适合无状态计算,也就是计算单元的依赖的数据全部在接受的消息中可以找到, 并且最好一个数据流不依赖另外一个数据流。
因此,常常用于:
- 日志分析,从日志中分析出特定的数据,并将分析的结果存入外部存储器如数据库。目前,主流日志分析技术就使用JStorm或Storm
- 管道系统, 将一个数据从一个系统传输到另外一个系统, 比如将数据库同步到Hadoop
- 消息转化器, 将接受到的消息按照某种格式进行转化,存储到另外一个系统如消息中间件
- 统计分析器, 从日志或消息中,提炼出某个字段,然后做count或sum计算,最后将统计值存入外部存储器。中间处理过程可能更复杂。
- 实时推荐系统, 将推荐算法运行在jstorm中,达到秒级的推荐效果