从零开始学Storm由基础知识、安装与部署、研发与维护、进阶知识、企业应用5个模块构成,并细分为20个章节,其中“基础知识”6章、“安装与部署”4章、“研发与维护”4章、“进阶知识”5章、“企业应用”1章,分别介绍了Storm的安装与配置、Storm的基本原理、Topology组件、Spout组件、Bolt组件、ZooKeeper集群、实战环节等内容,包括理论基础、环境搭建、研发准备、应用案例等。
从零开始学Storm理论联系实际,通过大量实例分析,让读者在较短的时间内掌握Storm的使用,搭建并研发出自己的基于Storm的大数据处理平台。
目录
- 第1章 Storm简介
- 1.1 什么是Storm
- 1.2 Storm的诞生
- 1.2.1 从Twitter说起
- 1.2.2 Twitter需要处理大批实时性要求高的大数据业务
- 1.2.3 Storm帮助Twitter解决实时海量大数据处理问题
- 1.3 Storm的成长
- 1.3.1 Storm正式开源
- 1.3.2 Storm的核心技术和基本组成
- 1.3.3 Storm的项目小组
- 1.3.4 Storm的技术支持网站
- 1.4 Storm的优势
- 1.4.1 集成多种技术
- 1.4.2 简单的API
- 1.4.3 可扩展的
- 1.4.4 容错的
- 1.4.5 保证数据处理
- 1.4.6 可以使用任何语言
- 1.4.7 部署和操作简单
- 1.4.8 自由开源
- 1.5 Storm的应用现状和发展趋势
- 1.5.1 应用现状
- 1.5.2 发展趋势
- 1.6 如何学习Storm
- 1.7 本书的章节安排及学习建议
- 1.7.1 本书的章节安排
- 1.7.2 关于如何阅读本书的建议
- 1.8 本章小结
- 第2章 Storm的基本知识
- 2.1 概念
- 2.1.1 元组(Tuple)
- 2.1.2 流(Stream)
- 2.1.3 喷口(Spout)
- 2.1.4 螺栓(Bolt)
- 2.1.5 拓扑(Topology)
- 2.1.6 主控节点与工作节点
- 2.1.7 Nimbus进程与Supervisor进程
- 2.1.8 流分组(Stream grouping)
- 2.1.9 工作进程(Worker)
- 2.1.10 任务(Task)
- 2.1.11 执行器(Executor)
- 2.1.12 可靠性(Reliability)
- 2.2 Storm的配置
- 2.2.1 Storm的配置类型
- 2.2.2 defaults.yaml文件
- 2.2.3 storm.yaml文件
- 2.2.4 Config类
- 2.3 序列化(Serialization)
- 2.3.1 动态类型
- 2.3.2 自定义序列化
- 2.3.3 Java序列化
- 2.3.4 特定组件序列化注册
- 2.4 容错机制
- 2.4.1 Worker进程死亡
- 2.4.2 节点死亡
- 2.4.3 Nimbus或者Supervisor守护进程死亡
- 2.4.4 Nimbus是否是“单点故障”的
- 2.5 可靠性机制——保证消息处理
- 2.5.1 消息被“完全处理”的含义
- 2.5.2 如果一个消息被完全处理或完全处理失败会发生什么
- 2.5.3 Storm如何保证可靠性
- 2.5.4 Storm如何实现可靠性
- 2.5.5 调节可靠性
- 2.6 消息传输机制
- 2.6.1 ZeroMQ
- 2.6.2 Netty
- 2.6.3 自定义消息通信机制
- 2.7 Storm的开发环境与生产环境
- 2.7.1 开发环境与本地模式
- 2.7.2 生产环境与远程模式
- 2.7.3 开发环境与生产环境的对比
- 2.8 Storm拓扑的并行度(parallelism)
- 2.8.1 工作进程、执行器和任务
- 2.8.2 配置拓扑的并行度
- 2.8.3 拓扑示例
- 2.8.4 如何改变运行中拓扑的并行度
- 2.9 Storm命令行客户端
- 2.10 Javadoc文档
- 2.11 本章小结
- 第3章 拓扑详解
- 3.1 什么是拓扑
- 3.2 TopologyBuilder
- 3.3 流分组
- 3.3.1 什么是流分组
- 3.3.2 不同的流分组方式
- 3.4 一个简单的拓扑
- 3.5 在本地模式下运行拓扑
- 3.6 在生产集群上运行拓扑
- 3.6.1 常见的配置
- 3.6.2 杀死拓扑
- 3.6.3 更新运行中的拓扑
- 3.6.4 监控拓扑
- 3.7 拓扑的常见模式
- 3.7.1 流连接(Stream Join)
- 3.7.2 批处理(Batching)
- 3.7.3 BasicBolt
- 3.7.4 内存中缓存与字段的组合
- 3.7.5 流的top N
- 3.7.6 高效保存最近更新缓存对象的TimeCacheMap(已弃用)
- 3.7.7 分布式RPC的CoordinatedBolt与KeyedFairBolt
- 3.8 本地模式与StormSubmitter的对比
- 3.9 多语言协议(Multi-Language Protocol)
- 3.10 使用非JVM语言操作Storm
- 3.10.1 支持的非Java语言
- 3.10.2 对Storm使用非Java语言
- 3.10.3 实现非Java DSL的笔记
- 3.11 Hook
- 3.12 本章小结
- 第4章 组件详解
- 4.1 基本接口
- 4.1.1 IComponent接口
- 4.1.2 ISpout接口
- 4.1.3 IBolt接口
- 4.1.4 IRichSpout与IRichBolt接口
- 4.1.5 IBasicBolt接口
- 4.1.6 IStateSpout与IRichStateSpout接口
- 4.2 基本抽象类
- 4.2.1 BaseComponent抽象类
- 4.2.2 BaseRichSpout抽象类
- 4.2.3 BaseRichBolt抽象类
- 4.2.4 BaseBasicBolt抽象类
- 4.3 事务接口
- 4.3.1 IPartitionedTransactionalSpout
- 4.3.2 IOpaquePartitionedTransactionalSpout
- 4.3.3 ITransactionalSpout
- 4.3.4 ICommitterTransactionalSpout
- 4.3.5 IBatchBolt
- 4.4 组件之间的相互关系
- 4.5 本章小结
- 第5章 Spout详解
- 5.1 可靠的与不可靠的消息
- 5.2 Spout获取数据的方式
- 5.2.1 直接连接(Direct Connection)
- 5.2.2 消息队列(Enqueued Messages)
- 5.2.3 DRPC(分布式RPC)
- 5.3 常用的Spout
- 5.3.1 Kestrel作为Spout的数据源
- 5.3.2 AMQP作为Spout的数据源
- 5.3.3 JMS作为Spout的数据源
- 5.3.4 Redis作为Spout的数据源
- 5.3.5 beanstalkd作为Spout的数据源
- 5.4 学习编写Spout类
- 5.5 本章小结
- 第6章 Bolt详解
- 6.1 Bolt概述
- 6.2 可靠的与不可靠的Bolt
- 6.2.1 使用Anchoring机制实现可靠的Bolt
- 6.2.2 使用IBasicBolt接口实现自动确认
- 6.3 复合流与复合Anchoring
- 6.3.1 复合流
- 6.3.2 复合Anchoring
- 6.4 使用其他语言定义Bolt
- 6.5 学习编写Bolt类
- 6.5.1 可靠的Bolt
- 6.5.2 不可靠的Bolt
- 6.6 本章小结
- 第7章 ZooKeeper详解
- 7.1 ZooKeeper简介
- 7.2 ZooKeeper的下载和部署
- 7.2.1 ZooKeeper的下载
- 7.2.2 ZooKeeper的部署
- 7.3 ZooKeeper的配置
- 7.4 ZooKeeper的运行
- 7.5 ZooKeeper的本地模式实例
- 7.6 ZooKeeper的数据模型
- 7.6.1 ZNode
- 7.6.2 ZooKeeper中的时间
- 7.6.3 ZooKeeper的Stat结构
- 7.7 ZooKeeper的命令行操作范例
- 7.8 Storm在ZooKeeper中的目录结构
- 7.9 本章小结
- 第8章 基础软件的安装与使用
- 8.1 Linux的基本操作
- 8.1.1 环境变量
- 8.1.2 常用命令
- 8.2 JDK的下载与配置
- 8.2.1 Sun JDK的下载
- 8.2.2 在Linux下安装JDK
- 8.2.3 在Windows下安装JDK
- 8.3 GitHub托管项目的下载
- 8.4 Maven的下载与配置
- 8.4.1 Maven的下载
- 8.4.2 在Linux下部署Maven
- 8.4.3 在Windows下部署Maven
- 8.5 其他软件——Notepad++
- 8.6 本章小结
- 第9章 Storm的安装与配置
- 9.1 Storm集群的安装步骤与准备工作
- 9.1.1 搭建ZooKeeper集群
- 9.1.2 安装Storm的本地依赖
- 9.1.3 下载并解压Storm发行版本
- 9.1.4 配置storm.yaml文件
- 9.1.5 启动Storm的守护进程
- 9.2 本地模式的Storm完整的配置命令
- 9.3 本章小结
- 第10章 Storm集群搭建实践
- 10.1 准备工作
- 10.1.1 概述
- 10.1.2 配置hosts文件
- 10.1.3 配置静态IP
- 10.1.4 集群SSH无密码
- 10.1.5 修改主机名
- 10.1.6 关闭防火墙
- 10.1.7 同步时间
- 10.1.8 安装JDK
- 10.2 ZooKeeper集群的搭建
- 10.2.1 部署第一个节点
- 10.2.2 部署第i个节点
- 10.2.3 启动ZooKeeper集群
- 10.2.4 查看ZooKeeper状态
- 10.2.5 关闭ZooKeeper集群
- 10.2.6 清理ZooKeeper集群
- 10.3 Storm集群的搭建
- 10.3.1 安装Storm依赖(每个Storm节点)
- 10.3.2 部署第一个节点
- 10.3.3 部署第i个节点
- 10.3.4 启动Storm守护进程
- 10.4 本章小结
- 第11章 准备Storm的开发环境
- 11.1 Storm的开发环境
- 11.1.1 什么是Storm的开发环境
- 11.1.2 如何管理Storm
- 11.1.3 如何提交拓扑到集群
- 11.2 Eclipse的下载与配置
- 11.2.1 Eclipse的下载
- 11.2.2 Eclipse的配置与运行
- 11.2.3 Eclipse插件的安装
- 11.3 使用Maven管理项目
- 11.3.1 Maven的下载与配置
- 11.3.2 配置pom.xml文件
- 11.3.3 运行Maven命令
- 11.4 使用Nexus搭建本地Maven私服
- 11.4.1 下载Nexus
- 11.4.2 运行Nexus
- 11.4.3 登录Nexus后台
- 11.4.4 配置Repositories
- 11.4.5 配置setting.xml文件
- 11.4.6 修改Eclipse的Maven插件的配置
- 11.5 使用SVN管理代码版本
- 11.5.1 在Windows下搭建SVN服务器
- 11.5.2 在Linux下搭建SVN服务器
- 11.5.3 安装SVN客户端
- 11.6 部署单节点的Storm集群
- 11.6.1 部署伪分布的ZooKeeper
- 11.6.2 部署伪分布的Storm集群
- 11.7 本章小结
- 第12章 开发自己的Storm应用
- 12.1 新建Maven项目
- 12.2 修改为适合Storm开发的项目
- 12.2.1 对包名进行分类管理
- 12.2.2 修改pom.xml文件
- 12.3 编写代码
- 12.3.1 编写Spout类
- 12.3.2 编写Bolt类
- 12.3.3 编写Topology类
- 12.4 本地测试运行
- 12.5 提交到Storm集群运行
- 12.5.1 使用Maven打包
- 12.5.2 提交jar包到集群
- 12.6 本章小结
- 第13章 storm-starter详解
- 13.1 storm-starter项目概述
- 13.2 storm-starter的下载
- 13.3 使用Maven进行管理
- 13.3.1 使用Maven打包storm-starter
- 13.3.2 使用Maven直接运行WordCountTopology
- 13.3.3 使用Maven运行单元测试
- 13.4 在Eclipse中运行
- 13.4.1 新建Maven项目的方式
- 13.4.2 导入已存在的项目的方式
- 13.5 storm-starter的入门例子
- 13.5.1 ExclamationTopology
- 13.5.2 WordCountTopology
- 13.5.3 ReachTopology
- 13.6 storm-starter的其他例子
- 13.6.1 BasicDRPCTopology
- 13.6.2 ManualDRPC
- 13.6.3 PrintSampleStream
- 13.6.4 RollingTopWords
- 13.6.5 SingleJoinExample
- 13.6.6 TransactionalGlobalCount
- 13.6.7 TransactionalWords
- 13.7 本章小结
- 第14章 研发与集群管理技巧
- 14.1 使用daemontools监控Storm进程
- 14.1.1 daemontools简介
- 14.1.2 安装daemontools
- 14.1.3 编写监控脚本
- 14.2 使用Monit监控Storm
- 14.2.1 Monit简介
- 14.2.2 安装Monit
- 14.2.3 配置Monit
- 14.2.4 启动Monit
- 14.2.5 获取Monit帮助信息
- 14.3 常用的集群操作命令
- 14.4 使用Storm的经验与建议
- 14.5 本章小结
- 第15章 DRPC详解
- 15.1 概述
- 15.2 DRPCTopologyBuilder
- 15.2.1 LinearDRPCTopologyBuilder
- 15.2.2 LinearDRPCTopologyBuilder提供的方法
- 15.2.3 LinearDRPCTopologyBuilder使用范例
- 15.2.4 LinearDRPCTopologyBuilder的工作原理
- 15.2.5 LinearDRPCTopologyBuilder目前已弃用
- 15.3 本地模式的DRPC
- 15.4 远程模式的DRPC
- 15.5 一个复杂的DRPC例子(计算reach值)
- 15.6 非线性DRPC
- 15.7 本章小结
- 第16章 事务拓扑详解
- 16.1 什么是事务拓扑
- 16.1.1 设计1
- 16.1.2 设计2
- 16.1.3 设计3(Storm的设计)
- 16.2 事务拓扑的设计细节
- 16.3 事务拓扑的实现细节
- 16.3.1 事务Spout的工作原理 262
- 16.3.2 “对于给定的事务id不能发射相同的Batch”的处理
- 16.3.3 更多的细节
- 16.4 事务拓扑API
- 16.4.1 Bolt
- 16.4.2 事务Spout
- 16.4.3 配置
- 16.5 TransactionalTopologyBuilder
- 16.5.1 TransactionalTopologyBuilder提供的方法
- 16.5.2 TransactionalTopologyBuilder类已弃用
- 16.6 一个简单的例子
- 16.7 本章小结
- 第17章 Trident详解
- 17.1 Trident概述
- 17.1.1 简单的例子——单词统计(TridentWordCount)
- 17.1.2 另一个例子——计算Reach值(TridentReach)
- 17.1.3 字段和元组
- 17.1.4 状态(State)
- 17.1.5 Trident拓扑的执行
- 17.2 Trident API
- 17.2.1 概述
- 17.2.2 本地分区操作
- 17.2.3 重新分区操作
- 17.2.4 聚合操作
- 17.2.5 流分组操作
- 17.2.6 合并与连接
- 17.3 Trident的状态
- 17.3.1 Trident状态分类
- 17.3.2 事务Spout(Transactional Spout)
- 17.3.3 不透明事务Spout(Opaque Transactional Spout)
- 17.3.4 非事务Spout(Non-transactional Spout)
- 17.3.5 Spout与State之间的联系
- 17.3.6 State API
- 17.3.7 persistentAggregate方法
- 17.3.8 实现 MapStates
- 17.4 Trident Spout
- 17.4.1 流水线(Pipelining)
- 17.4.2 Trident Spout的类型
- 17.5 本章小结
- 第18章 Storm的内部实现
- 18.1 文件系统分析
- 18.2 数据目录结构
- 18.2.1 Nimbus节点的目录结构
- 18.2.2 Supervisor节点的目录结构
- 18.3 代码库的结构
- 18.3.1 storm.thrift
- 18.3.2 Java接口
- 18.3.3 实现
- 18.4 拓扑的生命周期
- 18.4.1 启动拓扑
- 18.4.2 监控拓扑
- 18.4.3 杀死拓扑
- 18.5 Acking框架的实现
- 18.5.1 异或计算的基本原理
- 18.5.2 Acking框架的实现原理
- 18.5.3 Acker的execute方法
- 18.5.4 待定元组(pending tuple)和RotatingMap
- 18.6 Metric
- 18.7 本章小结
- 第19章 Storm相关的其他项目
- 19.1 JStorm项目
- 19.1.1 项目简介
- 19.1.2 下载与部署
- 19.1.3 源代码编译
- 19.2 storm-deploy项目
- 19.3 Storm与Kafka
- 19.3.1 Kafka简介
- 19.3.2 Kafka的安装
- 19.3.3 启动服务
- 19.3.4 测试运行
- 19.3.5 Storm与Kafka的项目
- 19.4 storm-kestrel项目 334
- 19.4.1 storm-kestrel项目简介
- 19.4.2 使用storm-kestrel项目
- 19.4.3 Kestrel服务器和队列
- 19.4.4 添加元素到kestrel
- 19.4.5 从Kestrel中移除元素
- 19.4.6 持续添加元素到Kestrel
- 19.4.7 使用KestrelSpout
- 19.4.8 执行
- 19.5 本章小结
- 第20章 企业应用案例
- 20.1 Storm席卷众多互联网企业
- 20.1.1 Storm的典型应用场景
- 20.1.2 Storm的三大基本应用
- 20.2 Storm在Twitter中的应用
- 20.2.1 Twitter公司简介
- 20.2.2 Storm帮助Twitter提升产品性能
- 20.2.3 MapR在Twitter中的应用简介
- 20.3 Storm在阿里巴巴集团的应用
- 20.3.1 阿里巴巴集团简介
- 20.3.2 Storm在阿里巴巴的应用
- 20.3.3 Storm在淘宝公司的应用
- 20.3.4 Storm在支付宝公司的应用
- 20.4 其他应用Storm的知名企业和项目
- 20.5 本章小结
- 参考资料