Storm简介
storm是用来做实时计算的框架,所以介绍storm之前需要知道什么是流式计算。
流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果。
而Storm用来实时处理数据,特点:低延迟、高可用、分布式、可扩展、数据不丢失。提供简单容易理解的接口,便于开发。
Storm与Hadoop的区别
Storm用于实时计算,Hadoop用于离线计算。
Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批。
Storm的数据通过网络传输进来;Hadoop的数据保存在磁盘中。
Storm与Hadoop的编程模型相似
Storm编程模型
流程分析:
1、storm组件由spout和bolt组成,spout组件(取源数据流的组件)首先从外部获取数据;
2、接着spout会将数据处理后以tuple为单位发射给后续bolt组件(该组件接收数据后进行逻辑处理),至于如何分发有多种规则可选,比如随机发或者按照指定字段发(类似于hadoop中默认的哈希值比上mapreduce,这种情况可以保证相同的字段必发射到某个bolt)。
3、处理逻辑1的bolt组件处理完数据后,会接着往后续处理逻辑2的bolt组件发射数据。
4、经过几个bolt组件处理后,达到要求,将数据保存起来,比如发到redis中。
注:如图所示,两个处理逻辑1 的bolt都接来自spout的数据,但两者的处理逻辑是相同的(两个线程做同样的事情),那么认为该bolt的并发度为
Topology:Storm中运行的一个实时应用程序的名称。(拓扑)
storm核心组件
组件介绍
1、Nimbus:用来进行资源分配和任务调度的,对任务进行监控;
2、zookeeper:协调服务,保存任务分配的信息、心跳信息、元数据信息;
3、Supervisor:一个Supervisor对应一个物理机,它是当前机器上的管理者,介绍Nimbus分配的任务,按需来启动自己的Worker,而Workder的数量是能通过配置文件来配置的(配置端口即可,将集群搭建的时候会说到);
4、Worker:执行具体的任务的组件,其中任务类型有两种,一种是Spout任务,另一种是Bolt任务,一个Worker中可能有多个Spout任务和Bolt任务;
5、Task:worker中每一个spout/bolt的线程称为一个task。每个Task属于某个组件并发度中的一个,一个Task本质上是一个线程。
默认情况下Task=executor=thread
流式计算架构
flume实时采集,用来获取数据,低延迟。
Kafka消息队列,用来临时保存数据,低延迟。
Strom实时计算,用来计算数据,低延迟。
Redis实时存储,是个内存数据库,用来保存数据,低延迟。
网站产生日志后,通过Flume来获取日志,接着将日志信息保存到Kafka中,Kafka将数据发送到Storm集群,Strom集群根据需求来进行计算,将结果保存到redis中。