体系概要
Storm发展历史
Storm相关术语
Storm原理分析
Storm主要特点
Storm的扩展:与YARN的结合
Storm的现状与发展趋势
1、Storm发展历史
2、Storm相关术语
1)Nimbus
Storm集群主节点,负责资源分配和任务调度
2)Supervisor
Storm集群工作节点,接收Nimbus分配任务,管理Worker。
3)Worker
Supervisor下的工作进程,具体任务执行。
4)Task
Worker下的工作线程,0.8版本之后表示逻辑线程。
5)Topology
实时计算逻辑,计算拓扑,由Spout和Bolt组成的图状结构。
6)Spout
Storm编程模型中的消息源,可进行可靠传输(ack/fail机制)。
7)Bolt
Storm编程模型中的处理组件,定义execute方法进行实际的数据逻辑处理。
8)Stream
拓扑中的消息流,传输的对象是Tuple
9)Tuple
一次消息传递的基本单元
10)Stream Groupings数据流分组策略
Shuffle Grouping:随机分组,保证bolt接受的tuple数据相同。(常用)
Fields Grouping:按字段分组,相同tuple会分到同一个bolt中。(常用)
All Grouping:广播发送,每个tuple会发送所有bolt中。
Global Grouping:全局分组,所有tuple发送给task_id最小的bolt。
Non Grouping:不分组,效果与Shuffle相似,发布订阅同一个线程。
Direct Grouping:直接分组,需要手动指定bolt。
Custom Grouping:自定义分组,自己实现分组方式。
3、Storm原理架构
1)Storm集群架构图
Zookeeper 高效开源的分布式应用协调服务,有leader节点和follower节点,leader节点负责写服务和数据的同步,follower节点负责读服务。奇数个。
nimbus不支持高可用,如果nimbus出现故障,那么任务不会受到影响,但管理会出现问题,恢复只需要重新恢复nimbus。
2)数据处理流程图
3)拓扑图分析
4、Storm主要特点
1)简单的编程模型
提供了简单的Spout+Bolt的编程模型,让普通的java开发工程师也能快速地、高效的写出高并发实时处理任务,大大地降低了相关业务处理的研发成本。
2)高扩展性
首先就是节点的支持水平扩展,支持干级节点的扩展;
工作进程的扩展,每个工作节点可以有多个工作进程;
每个工作进程可以创建多个线程;
每个线程又可以执行多个任务,任务才是真正进行数据处理的实体;
3)高可靠性
消息以消息树的形式存在,提供ack/fial消息保证机制。
4)高容错性
节点级别的容错;
worker级别的容错;
缺点:nimbus不支持容错
5)支持多语言编程
内部实现多语言协议,通过ShellSpout、ShellBolt以及ShellProcess等API实现。
6)支持本地模式
7)高性能
内部通讯采用ZeroMQ通讯,保证消息被快速处理。
5、Storm的扩展:与YARN的结合
1、YARN介绍
YARN是Hadoop在2.0中引入的资源管理系统,Hadoop的资源管理组件。
1)Hadoop1.X系统MapReduce工作流程:JobTracker负责资源管理以及任务调度;TaskTracker负责监控所在机器资源以及监控task执行情况。
2)架构存在的问题:JobTracker单点故障;JobTracker负荷过重;资源单一;资源分配不合理。
3)Hadoop2.X解决方案:资源管理与任务调度拆分,Yarn负责资源管理。
Yarn组成:ResourceManager;NodeManager;ApplicationMaster;
2、Storm与YARN结合优势
1)资源的弹性计算;
2)共享底层存储;
3)支持多版本共存;
4)整体架构的统一;
主流:Yahoo!开源的Storm on Yarn;
现状:不够稳定,离实际应用仍然需要一段时间;
3、当前存在的几个问题
1)增量资源请求受限
难以将所有Storm服务运行在相邻的节点上,比如在同一个机架上,这是由于YARN自身不支持资源组调度,只能实现指定一个机架。
2)nimbus故障切换,位置无法定位;
nimbus运行在ApplicationMaster上,当它失效时,YARN进行ApplicationMaster重启,nimbus位置转移,导致客户端无法定位nimbus。
3)NodeManager不支持动态升级;
Storm的拓扑任务通常是不能随意停止的实时计算任务,进行NodeManager升级的时候,需要把实时任务停止。
6、Storm的现状与发展趋势
1、Storm的应用场景
1)流式数据处理(数据预处理、ETL等);
2)并行计算Top N(按字段分组计算top,然后全局汇总);
3)微批处理(在时间窗口内进行批量处理);
4)分布式并行计算(DRPC);
2、实时处理相关系统架构
1)Yahoo!S4:扩展性不强,不支持数据容错,活跃度低;
2)Storm on Yarn:源于Storm与Yarn;
3)Spark Streaming:基于Spark,偏向于内存计算,实时性较差;
4)Apache Samza:基于YARN,集成了Kafka,轻量;
3、Storm与Hadoop的对比
Hadoop偏向于离线数据处理,Storm偏向于数据的实时计算;
1)编程模型很相似:Mapper对应Spout,Reducer对应Bolt;
2)处理方向不同,Hadoop偏向于离线批处理,Storm实时处理;
3)大数据处理架构中经常一同出现;
4、Storm发展趋势
1)Storm活跃情况(从社区、博客、Storm技术群);
2)企业需求(大数据处理需求量增大,Storm技术属于加分项);
3)大数据相关的大会,Storm专题数量上升;
4)当前互联网数据量在增长,实时处理业务增多;