2.2.8 Storm
Storm是一个分布式计算框架,主要使用Clojure与Java语言编写,最初由Nathan Marz带领Backtype团队创建,在Backtype被Twitter收购后进行开源。最初的版本在2011年9月17日发行,版本号为0.5.0。2013年9月,Apache软件基金会开始接管并孵化Storm项目。Apache Storm是在Eclipse Public License下进行开发的,它提供给大多数企业使用。2014年9月,Storm项目成为Apache的顶级项目。目前,Storm的最新版本为2.2.0。Storm是一个免费开源的分布式实时计算系统[14]。Storm可以简单、高效、可靠地处理流数据,并支持多种编程语言。Storm框架可以方便地与数据库系统进行整合,从而开发出强大的实时计算系统。Twitter是全球访问量最大的社交网站之一,Twitter开发Storm流处理框架也是为了应对其不断增长的流数据实时处理需求[15]。
Storm的特点如下。
1.API简单
Storm的API简单且容易使用。当编写Storm程序时,处理的是由元组组成的流数据,一个元组是一组值的集合。元组包含任何对象类型,当使用自定义数据类型时,只需要简单地使用Storm的序列化器注册即可。
2.可扩展性
Storm 采用拓扑并行计算并运行在集群中。不同的拓扑部分能调整它们的并行度。
3.容错性
Storm有容错机制,当工作节点死机时,Storm会尝试重启。如果节点死机,则重启另一个节点。Storm的守护进程Nimbus和Supervisors都是无状态的,如果它们崩溃,那么它们将会重启,就像什么也没发生一样。
4.无数据丢失
Storm确保每个元组被处理。Storm的机制之一是,能有效地记录元组的lineage。Storm的抽象组件确保数据至少处理一次,即使使用消息队列系统失败,也能确保消息被处理。通过Storm的抽象组件Trident能确保消息只被处理一次。
5.支持多种编程语言
Storm从一开始就设计为能被各种编程语言使用。Storm用Thrift定义和提交拓扑。由于Thrift能被任何一种编程语言使用,因此拓扑也能被任何一种编程语言定义和使用。
6.容易部署和操作
Storm集群易部署,要求配置最少就可以启动并运行。