一、首页
Apache Storm是免费开源的分布式实时计算系统。Storm能够可靠的处理无界数据流,这就使它能够实时处理一些Hadoop批处理的事情。Storm简单,可以使用任何编程语言。
Storm可以用于很多方面:实时分析、在线机器学习、持续计算、分布式RPC、ETL等。Storm的速度很快:每秒钟每个节点可以处理一百万条元组;并且是可伸缩的、可容错的,保证数据得到处理,同时易于搭建和操作。
Storm包含了你已在使用的队列以及数据库技术。Stormtopology可以以任意复杂的方式消耗数据流并处理这些数据流,同时在级联处理之间重新划分这些流。更多可以阅读指导
二、Integrates
源地址:http://storm.apache.org/about/integrates.html
Storm可以和任意队列化系统或者数据库系统集成在一起。 Storm的spout抽象使得集成新队列化系统变得很容易。例如:
1、Kestrel
3、Kafka
4、JMS
同样,集成storm与数据库也很简单。简单的打开与数据库的连接,就可以像你平时一样读写。当需要时,storm可以应对并行处理、数据划分、失败重启等。
三、simple-api
源地址:http://storm.apache.org/about/simple-api.html
Storm API比较简单并且易于利用。 当在Storm上编程时,你可以操纵并传递元组(tuples)流,元组是已经命名好的值列表。元组可以包含任意类型的对象,如果希望使用Storm不知道的类型,简单的方式是可以通过注册这种类型的序列化器的方式进行利用。
Storm只有三种抽象: Spouts、bolts以及topologies。 Spout是计算中流的来源。通常spout从队列化的broker中读取数据:例如Kestrel、RabbitMQ、或者Kafka,但是spout也可以产生自己数据流或者从其他的地方(例如Twitter streaming API)读取数据。Spout的实现可以兼容大多数队列化系统。
Bolt可以处理任意数量的输入流,并且可以产生任意数量的新输出流。大多数计算逻辑是在bolts中完成的,例如函数、过滤器、流合并、流聚合、连接数据库以及其他业务。
Topology是由Spouts以及Bolts组成的网络,网络中的每一个节点都代表一个bolt,bolt既可能订阅其他spout输出流,也可能订阅bolt的输出流。Topology是任意复杂的多级流计算系统。一旦部署好,Topology可以无限运行下去。
Storm有一种本地模式:即Storm集群是模拟的进程内方式。这对开发和测试很有用。storm命令行客户端可以用来准备向实际集群提交topology应用。
storm-starter项目包含topology例子,用来学习storm基本知识。更多介绍需要阅读tutorial以及documentation。
四、Scalable
源地址:http://storm.apache.org/about/scalable.html
Storm topology天生可以并行处理,并且通过机器集群运行。Topology不同的部分可以通过调整他们并行化进行个体的伸缩。“rebalance”命令可以调整飞速运行中topology的并行处理。
Storm天生的并行处理机制意味着它可以处理巨大吞吐量的消息,并且延迟很小。 Storm基准是:每个节点每秒钟处理100万条100字节的消息,硬件环境是:
处理器: 2x Intel E5645@2.4GHz
内存:24GB
五、Fault tolerant
源地址:http://storm.apache.org/about/fault-tolerant.html
Storm是可容错的: 当worker死掉时,Storm将自动重启它们。 如果节点死掉了,worker将在另一个节点上重启。
Storm daemons(nimbus以及supervisor),设计为无状态并且快速失败的。因此,如果它们死掉了,它们会像什么都没发生一样重启。这就意味着你可以使用kill -9杀掉Storm daemons,而不需要影响集群或者topology的健康状况。
Storm's 容错性能的更多介绍在manual。
六、Guarantees data processing
源地址:http://storm.apache.org/about/guarantees-data-processing.html
Storm保证每一个tuple可以完全处理。 Storm's核心机制之一就是跟踪tuple的血统来源,这就保证元组可以以极端有效的方式通过topology。更多介绍请阅读这里。
Storm's 基本抽象提供至少处理一次的保证,当使用队列化系统时依然可以获得这种保证。 消息只有在处理失败时才会重新处理。
使用Trident,这是基于Storm's 基本抽象的更高抽象,你可以获取每一个处理准去的语义。
七、Use with any language
源地址:http://storm.apache.org/about/multi-language.html
Storm从一开始就被设计成可以使用任意编程语言。Storm核心是用来定义和提交topologies的Thrift定义。因为Thrif可以使用任何语言,topologies可以使用任何语言进行定义以及提交。
相似的, spouts以及bolts可以使用任何语言定义。non-JVM spouts以及bolts通过JSON-based协议与storm通信。可以选择Ruby、Python、Javascript、Perl以及PHP实现这个协议。
storm-starter包含一个topology实例,是使用python实现的一个bolts。
八、Easy to deploy and operate
源地址:http://storm.apache.org/about/deployment.html
Storm 集群易于搭建,需要少量设置和配置就可以运行。 Storm's 简单配置适合产品开发。更多关于Storm cluster搭建的介绍请阅读这里。
如果你处在EC2上,storm-deploy项目可以通过抓取按键获取提、配置、安装storm集群。
另外,一旦部署,storm易于操作。Storm设计鲁棒性很强----集群将保证运行数月或更久。
九、free-and-open-source
源地址:http://storm.apache.org/about/free-and-open-source.html
Apache Storm是免费并且开源的项目,遵守Apache条约-Version2.0,如今正在接受Apache Software Foundation(ASF)的孵化,由Apache孵化器赞助。
Storm拥有巨大并且正在扩大的生态圈,这其中包含了大量的库以及工具,可以用来连接以下Storm包含的组件:
1、Spouts: 这些Spouts可以和队列系统集成在一起,例如JMS、Kafka、Redispub/sub等等。
2、storm-state:为了管理计算中的大量内存状态,可靠的方式是采取分布式系统长久运行的方式,而storm-state使得这一切变得容易。
3、数据库集成:bolts可以集成多种数据库:例如MongoDB、RDBMS's、Cassandra等。
4、其他杂项应用
Storm文档包含了其他一些与Storm相关的项目,某些可能不在Apache名下。