Storm官方文档about页面翻译

原创翻译,如有错误请指出,谢谢。

原文链接:http://storm.incubator.apache.org/about/integrates.html

 

集成

Storm可以集成任何队列系统和数据库系统。Storm的spout的抽象使得集成一个新的队列系统变得简单。示例的队列集成包括:

  1. Kestrel
  2. RabbitMQ / AMQP
  3. Kafka
  4. JMS
  5. Amazon Kinesis

同样的,集成数据库系统到Storm中也很简单。简单的打开一个连接到你的数据库,进行你通常想要做的读写。

Storm会处理并行(parallelization),分片(partitioning),在必要的时候会失败重试。


简单的API

Storm 有一套简单并易于使用的API。当在Storm上写程序时,你要对数据流中的消息(tuple)进行处理和转换,tuple就是一个有名字的list,一 个名字对应着list中的一个值。tuple可以包括任何类型的对象,如果你想使用一个Storm不认识的类型,你需要为这个类型注册一个序列化器 (serializer),这很简单。

Storm中仅有3种抽象:spouts,bolts和拓扑(topologies)。一个 spout是一个计算流的来源。通常来说一个spout从一个队列系统读取数据,比如Kestrel, RabbitMQ,或者Kafka,但是一个spout也可以自己产生自己的数据流,或者从其他的地方读取,比如推特的流API。Spout对于大多数队 列系统都已有实现。

一个bolt处理任意数量的输入流,并产生任意数量的新的输出流。计算的大部分逻辑都有bolt来实现,比如functions,filters,streaming joins,streaming aggregations,与数据库通信,等等。

一个拓扑(topology) 是一个由spout和bolt组成的网络(network),其中的每一条边(edge)代表一个bolt订阅了其他某个spout或bolt的输出流。 一个拓扑是一个任意的复杂的多阶段(multi stage)的流计算。当部署拓扑到集群上时,拓扑会一直无限运行下去,除非我们显式的杀死它。

Storm有一个本地模式(local mode),就是在一个单一的进程里模拟Storm集群。这在开发测试的时候很有用。Storm的命令行客户端用来将一个准备好的拓扑提交到实际的集群中进行计算。

storm-starter项目包含了简单的拓扑,用来学习基本的Storm的开发。怎样使用Storm可参考官方tutorial和官方文档集。


可扩展性

Storm的拓扑跑在一个集群中的各个节点上,天生就是并行的。一个拓扑中的不同的部分(各个bolt)可以通过调节他们的并行度(parallelism)来独立的扩展。

命令行命令storm的子命令rebalance可以动态的调整一个正在运行的拓扑的并行度。

Storm天生的并行度意味着它有非常高的吞吐量并且延迟很低。Storm在下列硬件条件下做了一个benchmark:每个节点每秒可处理100w个大小为100字节的消息。


容错

Storm是容错的:当worker进程死掉,Storm会自动的重启它们。如果节点挂掉,worker进程会在另外一个节点重启。

Storm 的后台进程,Nimbus和Supervisor进程被设计成无状态的(stateless)和快速失败的(fail-fast)。如果它们挂掉,它们能 像什么都没有发生一样的重启。这意味着你可以使用kill -9来杀掉Storm的后台进程,且不会影响到集群的健康或者你的拓扑。

后面的文档可以看到更多相关的话题。


数据能够被处理的保证

Storm可以保证每个tuple能被完全的处理。Storm的一个核心机制是使用一种极其高效的方式来跟踪一个tuple在一个拓扑的轨迹。可以参考这篇文章(链接to do..)。

Stor的基本抽象提供了一个至少处理一次(at-least-once)的保证,当使用队列系统时也可以获得同样的保证。当处理失败时消息才会被重新发送(replay)。

使用Trident,一个建立在Storm的基本抽象的高层次的抽象,你可以实现仅处理一次(exactly-once)的处理语义。


使用其他的任何编程语言

Storm被设计成完全的支持任何编程语言。Storm的核心是一个Thrift定义,可以用来定义和提交拓扑。因为Thrift支持任何语言,所以定义和提交拓扑也可以支持任何语言。

同样的,spout和bolt也可以使用任何语言定义。非JVM语言写的spout和bolt通过建立在stdin/stdout之上的JSON-based protocol来在Storm集群间进行通信。Ruby,Python,Javascript,Perl,PHP都实现了这个协议的适配器。

前面提到的storm-starter项目中也有一个示例使用Python实现了一个bolt。


部署和维护简单

Storm集群部署起来很容易,需要一个最小化的安装和配置就能跑起来。Storm自带的配置就适用于生产环境。部署过程参见后面的文章。

如果你使用EC2,storm-deploy项目能帮你一键搞定。

此外,Storm一旦部署完成,维护起来很简单。Storm设计得非常健壮,集群在数月之后依然能保持运行。


自由并且开源

Apache Storm是一个自由且开源的项目,使用Apache License, Version 2.0许可证,当前是Apache Software Foundation (ASF)的孵化项目,由Apache Incubator提供赞助。

Storm有一个庞大且正在增长的生态系统,提供了很多可以集成到Storm的工具和库,包括以下组件:

  1. Spouts: JMS, Kafka, Redis pub/sub等等可以集成到spout。
  2. storm-state: storm-state 使得可以使用分布式文件系统轻松的管理计算中的内存中的大量数据并持久化。
  3. 数据库集成: 有很多辅助的bolt可以集成很多种数据库,比如MongoDB, RDBMS’s, Cassandra。等等。
  4. 更多其他的工具。

Storm官方文档中还有更多Storm相关的项目的链接,这些项目不在Apache项目的范畴内。

你可能感兴趣的:(storm)