storm是我接触并在项目中用到的第一个实时计算框架,做下总结:
一、首先如果如果让我们自己设 计一个实时计算系统,我们要解决哪些问题?
1、低延迟。都说了是实时计算系统了,延迟是一定要低的。
2、高性能。性能不高就是浪费机器。
3、分布式。系统都是为应用场景而生的,如果你的应用场景、你的数据和计算单机就能搞定,那么不用考虑这些复杂的问题了。我们所说的是单机搞不定的情况。
4、可扩展。伴随着业务的发展,我们的数据量、计算量可能会越来越大,所以希望这个系统是可扩展的。
5、 容错。这是分布式系统中通用问题。一个节点挂了不能影响我的应用。
二、如果仅仅需要解决这5个问题,可能会有无数种方案,而且各有千秋,随便举一种方案,使用消息队列+分布在各个机器上的工作进程就ok啦。再继续往下看:
1、容易在上面开发应用程序。你设计的系统需要应用程序开发人员考虑各个处理组件的分布、消息的传递吗?如果是,那有点麻烦啊,开发人员可能会用不好,也不会想去用。
2、消息不丢失。用户发布的一个宝贝消息不能在实时处理的时候给丢了,对吧?更严格一点,如果是一个精确数据统计的应用,那么它处理的消息要不多不少才行。这个要求有点高。
3、消息严格有序。有些消息之间是有强相关性的,比如同一个宝贝的更新和删除操作消息,如果处理时搞乱顺序完全是不一样的效果了。
三、storm优势
1. 简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
2. 服务化,一个服务框架,支持热部署,即时上线或下线App.
3. 可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
4. 容错性。Storm会管理工作进程和节点的故障。
5. 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
6. 可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
7. 快速。系统的设计保证了消息能得到快速的处理,使用ZeroMQ作为其底层消息队列。
8. 本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
四、storm架构
Storm集群由一个主节点和多个工作节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus和Supervisor都能快速失败,而且是无状态的,这样一来它们就变得十分健壮,两者的协调工作是由Zookeeper来完成的。ZooKeeper用于管理集群中的不同组件,ZeroMQ是内部消息系统,JZMQ是ZeroMQMQ的Java Binding。有个名为storm-deploy的子项目,可以在AWS上一键部署Storm集群.
五、相关概念:
首先与hadoop中概念做个比较,如图:
Nimbus:负责资源分配和任务调度。
Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
Worker:运行具体处理组件逻辑的进程。
Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。
Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
Spout:在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为
topology内部的源 数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。
Bolt:在一个topology中接受数据然后执行处理的组件。
Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被 动的角色,其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。
Tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value
就行了,所以就是一个value list.Stream:源源不断传递的tuple就组成了stream。
相关推荐
该文档来自Spark Summit 2013峰会上Yahoo高级架构师Andy Feng的主题演讲。Andy Feng重点介绍了雅虎的现状,通过图文并茂的方式介绍了雅虎的主页和个性化属性,以及试点的电子商务和广告业务,重点阐述Hadoop和Spark...
storm 入门学习笔记。主要包括 storm概念,storm架构。能很好的对 storm 基础有一个入门。
Storm入门教程 之Storm原理和概念详解,出自Storm流计算从入门到精通之技术篇,Storm入门视频教程用到技术:Storm集群、Zookeeper集群等,涉及项目:网站PV、UV案例实战、其他案例; Storm视频教程亮点: 1、Storm...
storm on yarn概念架构消息机制概述 包括storm job跟mapreduce job对比 storm on yarn架构图 storm关键概念描述 storm消息机制介绍
Storm实时处理方案架构.docx
CPU 模块 ClusterCPU 模块 ClusterCPU模块CPU模块CPU模块CPU模块CPU模块CPU模块CPU模块CPU模块网站前台网站前台Data
storm是twitter开源数据流处理架构,常用于兴趣推送、日志提醒等
第7章演示集成Storm和非事务型系统 的复杂性,通过集成Storm和开源探索性分析架构 Druid实现一个可配置的实时系统来分析金融事件。 第8章探讨Lambda体系结构的实现方法,讲解如何 将批处理机制和实时处理引擎结合...
作为分布式系统架构,Hadoop具有高可靠性、高扩展性、高效性、高容错性和低成本的优点。然而随着数据体积越来越大,实时处理能力成为了许多机构需要面对的首要挑战。Hadoop是一个批处理系统,在实时计算处理方面显得...
1、课程中完整开发3个Storm项目,均为企业实际项目,其中一个是完全由Storm Trident开发。 项目源码均可以直接运行,也可直接用于商用...6、分享实际项目的架构设计、优劣分析和取舍、经验技巧,陡直提升学员的经验值。
详细介绍storm的概念 起源 架构 组件 原理已经应用场景描述
Storm 代码来自于Twitter上月收购的BackType,似乎是Twitter为方便用户解析数据的努力。 现在Storm的势头相当强劲,...相当热门的新创公司Cloudera,其产品也是基于Hadoop,并为Facebook和其他公司提高了基础架构。
基于storm的运维 调优和相关的真实案例,主要从storm的基础架构开始,然后有重点的分析核心架构和对应的真实案例,以及如何解决日常问题,从安装部署和启动以及运行等多个角度进行说明,最后再介绍如何进行storm的生产...
storm是一个流式架构,当我们用idea或者eclipse进行编程时需要导入storm的依赖jar包,一共173个打包在一起,亲测有效
Kafka+FlumeNG+Storm+HBase构架设计
本书介绍了Storm实时平台的总体架构,剖析相关源码并配有顺序图,分享了监控Storm的常用方法、应用小技巧和性能优化经验。
包含Storm入门到精通,Storm上下游及架构集成、日志告警系统、日志分析、电商交易风控、喜欢推荐系统、混合推荐系统等
基于Storm和Hadoop的大数据处理架构的研究_靳永超.pdf
ApacheStorm的前身是TwitterStorm平台,目前已经归于Apache基金会管辖。...Storm集群采用主从架构方式,主节点是Nimbus,从节点是Supervisor,有关调度相关的信息存储到ZooKeeper集群中,架构如下图所示:N
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学...基于Storm+Esper架构实现的证券异常交易行为监控系统源码+项目说明(支持金证交易系统的指令拦截 、复制与解析).zip