一、Storm概述
1、什么是离线计算
离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示
代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据
2、什么是流式计算
流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
代表技术:Flume实时获取数据、Kafka实时数据存储、Storm实时数据计算、Redis实时结果缓存、持久化存储(mysql)
3、Storm是什么
Storm是一个免费开源的分布式实时计算系统。Storm能轻松可靠地处理无界的数据流。
4、Storm与Hadoop的区别是什么
1)Storm用于实时计算,Hadoop用于离线计算。
2)Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批处理。
3)Storm的数据通过网络传输进来;Hadoop的数据保存在磁盘中。
5、Storm特点
1)适用场景广泛:Storm可以适用实时处理消息、更新数据库、持续计算等场景。
2)可伸缩性高:Storm的可伸缩性可以让Storm每秒处理的消息量达到很高。扩展一个实时计算任务,你所需要做的就是加机器并且提高这个计算任务的并行度。Storm使用Zookeeper来协调机器内的各种配置使得Storm的集群可以很容易的扩展。
3)保证无数据丢失:Storm保证所有的数据都被处理。、
4)异常健壮:Storm集群非常容易管理,轮流重启节点不影响应用。
5)容错性好:在消息处理过程中出现异常,Storm会进行重试。
二、Storm基础知识
1、 Storm编程模型
1)元组(Tuple)
消息传递的基本单元,元组中的字段可以是任何类型的对象,元组支持所有的基本类型、字符串和字节数组作为字段值,只要实现类型的序列化接口就可以使用该类型的对象,元组是一个value的List。
2)水龙头(Spout)
Spout是拓扑的流的来源,是一个拓扑中产生源数据流的组件。
Spout的主要方法是nextTuple()。
Spout的其他方法是ack()和fail()。当Storm检测到一个元组从Spout发出时,ack()和fail()会被调用,要么成功完成通过拓扑,要么未能完成。Ack()和fail()仅被可靠的Spout调用。
IRichSpout是Spout必须实现的接口。
3)转接头(Bolt)
在拓扑中所有处理都在Bolt中完成,Bolt是流的处理节点,从一个拓扑接收数据,然后执行进行处理的组件。
Bolt是一个被动的角色,接口中有一个execute()方法,在接收到消息后会调用此方法,用户可以在其中执行自己希望的操作。
Bolt可以完成简单的流的转换,而完成复杂的流的转换通常需要多个步骤,因此需要多个Bolt。
4)拓扑(Topology)
拓扑(Topology)是Storm中运行的一个实时应用程序,因为各个组件间的消息流动而形成逻辑上的拓扑结构。
2、Storm核心组件
nimbus是整个集群的控管核心,负责topology的提交、运行状态监控、任务重新分配等工作。
zk就是一个管理者,监控者。
总体描述:nimbus下命令(分配任务),zk监督执行(心跳监控,worker、supurvisor的心跳都归它管),supervisor领旨(下载代码),招募人马(创建worker和线程等),worker、executor就给我干活!task就是具体要干的活。
3、实时流计算常见架构图
1)Flume获取数据。
2)Kafka临时保存数据。
3)Strom计算数据。
4)Redis是个内存数据库,用来保存数据。