第1章 Storm简介
1.1 什么是Storm 2
1.2 Storm的诞生 3
1.2.1 从Twitter说起 3
1.2.2 Twitter需要处理大批实时性要求高的大数据业务 4
1.2.3 Storm帮助Twitter解决实时海量大数据处理问题 4
1.3 Storm的成长 5
1.3.1 Storm正式开源 5
1.3.2 Storm的核心技术和基本组成 6
1.3.3 Storm的项目小组 7
1.3.4 Storm的技术支持网站 12
1.4 Storm的优势 15
1.4.1 集成多种技术 15
1.4.2 简单的API 16
1.4.3 可扩展的 16
1.4.4 容错的 16
1.4.5 保证数据处理 17
1.4.6 可以使用任何语言 17
1.4.7 部署和操作简单 17
1.4.8 自由开源 17
1.5 Storm的应用现状和发展趋势 18
1.5.1 应用现状 18
1.5.2 发展趋势 20
1.6 如何学习Storm 22
1.7 本书的章节安排及学习建议 23
1.7.1 本书的章节安排 23
1.7.2 关于如何阅读本书的建议 24
1.8 本章小结 24
第2章 Storm的基本知识
2.1 概念 26
2.1.1 元组(Tuple) 26
2.1.2 流(Stream) 27
2.1.3 喷口(Spout) 28
2.1.4 螺栓(Bolt) 28
2.1.5 拓扑(Topology) 29
2.1.6 主控节点与工作节点 29
2.1.7 Nimbus进程与Supervisor进程 29
2.1.8 流分组(Stream grouping) 30
2.1.9 工作进程(Worker) 30
2.1.10 任务(Task) 30
2.1.11 执行器(Executor) 30
2.1.12 可靠性(Reliability) 30
2.2 Storm的配置 31
2.2.1 Storm的配置类型 31
2.2.2 defaults.yaml文件 32
2.2.3 storm.yaml文件 35
2.2.4 Config类 36
2.3 序列化(Serialization) 37
2.3.1 动态类型 37
2.3.2 自定义序列化 37
2.3.3 Java序列化 38
2.3.4 特定组件序列化注册 38
2.4 容错机制 39
2.4.1 Worker进程死亡 39
2.4.2 节点死亡 39
2.4.3 Nimbus或者Supervisor守护进程死亡 39
2.4.4 Nimbus是否是“单点故障”的 39
2.5 可靠性机制——保证消息处理 40
2.5.1 消息被“完全处理”的含义 40
2.5.2 如果一个消息被完全处理或完全处理失败会发生什么 41
2.5.3 Storm如何保证可靠性 41
2.5.4 Storm如何实现可靠性 44
2.5.5 调节可靠性 45
2.6 消息传输机制 46
2.6.1 ZeroMQ 46
2.6.2 Netty 46
2.6.3 自定义消息通信机制 47
2.7 Storm的开发环境与生产环境 47
2.7.1 开发环境与本地模式 47
2.7.2 生产环境与远程模式 47
2.7.3 开发环境与生产环境的对比 48
2.8 Storm拓扑的并行度(parallelism) 49
2.8.1 工作进程、执行器和任务 49
2.8.2 配置拓扑的并行度 50
2.8.3 拓扑示例 51
2.8.4 如何改变运行中拓扑的并行度 52
2.9 Storm命令行客户端 53
2.10 Javadoc文档 57
2.11 本章小结 57
第3章 拓扑详解
3.1 什么是拓扑 59
3.2 TopologyBuilder 59
3.3 流分组 61
3.3.1 什么是流分组 61
3.3.2 不同的流分组方式 62
3.4 一个简单的拓扑 66
3.5 在本地模式下运行拓扑 69
3.6 在生产集群上运行拓扑 70
3.6.1 常见的配置 71
3.6.2 杀死拓扑 72
3.6.3 更新运行中的拓扑 72
3.6.4 监控拓扑 72
3.7 拓扑的常见模式 72
3.7.1 流连接(Stream Join) 72
3.7.2 批处理(Batching) 73
3.7.3 BasicBolt 73
3.7.4 内存中缓存与字段的组合 73
3.7.5 流的top N 74
3.7.6 高效保存最近更新缓存对象的TimeCacheMap(已弃用) 76
3.7.7 分布式RPC的CoordinatedBolt与KeyedFairBolt 76
3.8 本地模式与StormSubmitter的对比 76
3.9 多语言协议(Multi-Language Protocol) 78
3.10 使用非JVM语言操作Storm 82
3.10.1 支持的非Java语言 82
3.10.2 对Storm使用非Java语言 82
3.10.3 实现非Java DSL的笔记 82
3.11 Hook 83
3.12 本章小结 84
......