Storm入门教程
1. Storm基础
Storm
Storm主要特点
Storm基本概念
Storm调度器
Storm配置
Guaranteeing Message Processing(消息处理保障机制)
Daemon Fault Tolerance(守护线程容错机制)
理解Storm拓扑的并行
Tutorial
Local模式
在生产环境中运行Topologies
Storm
Storm是一个免费开源的分布式实时计算系统。Storm令无边界的流数据计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。
Storm常用在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等场景中。Storm处理速度快,单节点每秒可处理百万级元组的数据;同时,Storm是可扩展的、有容错性,容易部署与操作。
Storm已整合现有的消息队列和数据库系统。
Storm主要特点
- 简单的API接口
Storm的API简单且容易使用。当编写Storm程序时,处理的是元组组成的流数据,一个元组是一组值的集合。元组包含任何对象类型,当使用自定义数据类型时,只需要简单的使用storm的序列化器注册一下即可。
Storm提供了三种抽象的组件,分别是Spouts、Bolts和Topologies。Spouts组件是负责接收或生产处理所需的数据源。通常spout从消息队列中读取数据,比如Kestrel、RabbitMQ或是Kafka,也可以从其他地方生产自己需要的数据源,比如调用Twitter streaming API。Spout已经和大部分的消息队列集成。
Bolts处理接收到的数据流,生产出新的数据流提供给其他组件调用。大部分的计算逻辑都由bolt处理。比如函数处理、过滤器、join、聚集、甚至是数据库调用等等。
一个Topologie组件就是由多个spout和bolt组成的网络结构。网络中的每一个边线代表一个bolt组件订阅的数据流,这个数据流可能来至spout组件,也可能来至其他bolt组件。一个Topology组件就是复杂的流处理计算过程。Topology部署在服务器上就会一直运行。
Storm提供了一种本地运行模式,来模拟集群处理,这对开发和测试非常有用。客户端使用strom命令提交一个Topology到集群上运行。
- 可扩展性
Storm topologies先天并行计算并且运行在集群中。不同的topology的部分能调整它们的并行度,如client可通过“rebalance”命令及时调整正在运行的topologies的并行度。
先天并行计算是指它在低延迟的前提下保证了高吞吐量。如,在单台节点(处理器:2x Intel E5645@2.4Ghz,内存:24GB)上每秒处理百万级消息,消息约为100字节。
- 容错性
Storm有容错机制,当工作节点宕了,storm会尝试重启。如果节点宕机,会重启另启动一个节点。
Storm的守护进程Nimbus和Supervisors都是无状态的,如果它们死掉,那么它们将会重启就像什么也没发生。也就就是说,即使你用kill -9强制杀死这两个进程那么也不会影响集群的正常运行。
- 无数据丢失
Storm确保每个元组被处理。Storm的机制之一:能有效地记录元组的lineage。
Storm的抽象组件确保了数据至少处理一次,即使使用消息队列系统失败时,也能确保消息被处理。
通过Storm的抽象组件Trident能确保消息只被处理一次。
- 支持多种编程语言
Storm从一开始就设计为能被各种编程语言使用。Storm用Thrift定义和提交topologies。由于Thrift能被任何一种编程语言使用,因此,topologies也能被任何一种编程语言定义和使用。
同样,spouts和bolts能用任何一种语言定义。不是基于JVM实现的Storm最贱spouts和bolts可以通过JSON协议通信。
-
容易部署和操作
Storm集群易部署,要求配置最少就可以启动并运行。 -
免费开源
Storm遵循开源协议Apache License, Version 2.0
Storm有庞大的生态系统库和工具:
1.Spouts:spouts已经和常用消息队列系统JMS、Kafka、Redis pub/sub等进行了整合。
2.storm-state:storm-state使计算中的内存状态易管理和可靠(通过分布式文件系统持久化)。
3.数据库集成:bolts已整个不同的数据库如MongoDB,RDBM,Cassandra等。
4.其他功能。