第一篇 基础篇 流式数据处理概论 3
第1章 大数据环境下的云计算与物联网 3
1.1 云计算与物联网 3
1.1.1 云计算 3
1.1.2 物联网 6
1.2 大数据下的新挑战 8
1.2.1 大数据及其特征 8
1.2.2 大数据处理的技术挑战 11
1.3 本章小结 14
第2章 流式计算的理论与技术 15
2.1 流式数据与流式实时计算 15
2.1.1 流式数据 15
2.1.2 流式实时计算 18
2.2 流式数据处理的系统与应用 20
2.2.1 发展与挑战 20
2.2.2 Hadoop 2.0生态圈 22
2.3 Storm 27
2.3.1 起源与发展:Twitter的开源与影响 27
2.3.2 功能 29
2.3.3 特色:可扩展、可靠的分布式流式数据处理 30
2.4 其他开源流式数据处理系统 34
2.4.1 Yahoo S4 34
2.4.2 Spark Streaming 37
2.4.3 Facebook Puma 41
2.5 本章小结 42
第3章 实际案例:城市道路车辆数据的实时监控分析系统 43
3.1 背景与需求分析 43
3.1.1 背景 43
3.1.2 数据处理的业务需求 45
3.2 数据处理系统的架构设计与技术选型 46
3.2.1 架构设计 46
3.2.2 技术选型 48
3.3 本章小结 49
第二篇 系统篇流式数据处理系统Storm的基础原理 53
第4章 Storm的系统架构 53
4.1 系统架构与部署模式 53
4.1.1 系统架构 53
4.1.2 单机/分布式部署 56
4.1.3 本地模式 58
4.2 系统节点 59
4.2.1 Zookeeper:协调节点 59
4.2.2 nimbus:主控节点 63
4.2.3 supervisor:工作节点 65
4.2.4 UI:控制台节点 68
4.3 本章小结 70
第5章 Storm的通信模型 71
5.1 Thrift:可扩展、跨语言的通信软件框架 71
5.1.1 Thrift的基础概念 71
5.1.2 基于Thrift的数据通信 74
5.2 Thrift在Storm中的应用:系统节点间的通信 75
5.2.1 接口的定义与实现 75
5.2.2 客户端与Storm系统的通信 82
5.3 ZeroMQ在Storm中的应用:作业任务间的通信 83
5.3.1 ZeroMQ:面向分布式并发应用的高性能异步消息处理库 83
5.3.2 Tuple与declareOutputFields():数据项结构及声明 86
5.4 Storm可配置的通信机制 89
5.5 本章小结 90
第6章 Storm的作业单元:Topology 91
6.1 Topology的构成 91
6.2 Stream:组件间的数据传递 93
6.2.1 概述 93
6.2.2 Stream Grouping:流组模式 94
6.2.3 自定义流组 101
6.3 构建Topology 104
6.3.1 TopologyBuilder与Config 104
6.3.2 Topology构建示例 106
6.3.3 Topology常见的编程模式 107
6.4 本章小结 109
第7章 Storm的数据源编程单元:Spout 110
7.1 Spout的接口与实现 110
7.1.1 Spout与接口层次 110
7.1.2 ISpout和IComponent接口 111
7.1.3 接口的实现类及实例 113
7.2 Spout的使用模式 115
7.2.1 直接连接 115
7.2.2 队列连接 119
7.3 Spout与数据的可靠性 121
7.3.1 可靠的Spout与不可靠的Spout 121
7.3.2 可靠的Spout的数据项管理 122
7.4 本章小结 125
第8章 Storm的数据处理编程单元:Bolt 126
8.1 Bolt的接口与实现 126
8.1.1 Bolt与接口层次 126
8.1.2 IBolt和IComponent接口 127
8.1.3 接口的实现类及实例 131
8.2 Bolt与数据的可靠性 133
8.2.1 可靠的Bolt与不可靠的Bolt 133
8.2.2 可靠的Bolt的数据项管理 133
8.2.3 IBasicBolt和BaseBasicBolt 136
8.3 本章小结 137
第9章 Storm的保障机制 138
9.1 Storm的功能性保障:多粒度的并行化 138
9.1.1 并发模型 138
9.1.2 并行度配置 139
9.1.3 可插拔的自定义调度器 144
9.2 Storm的非功能性保障:多级别的可靠性 149
9.2.1 不同级别的容错机制 149
9.2.2 记录级容错:保障数据项不丢失 151
9.2.3 记录级容错的原理:acker任务与追踪算法 157
9.3 本章小结 164
第10章 Storm的高层使用模式 165
10.1 分布式远程过程调用 165
10.1.1 概述 165
10.1.2 DRPC的构建与使用 166
10.1.3 Storm的DRPC原理 171
10.2 事务型作业 173
10.2.1 概述 173
10.2.2 TransactionalTopology的构建与使用 175
10.2.3 Transactional Topology的编程接口与事务型作业的实现 179
10.2.4 CoordinatedBolt的原理 181
10.3 非Java语言的开发 182
10.3.1 支持多语言的协议 182
10.3.2 Shell组件 187
10.4 本章小结 189
第三篇 应用篇基于流式数据处理系统Storm的开发 193
第11章 Storm的系统部署 193
11.1 系统环境 193
11.2 依赖程序的安装 194
11.2.1 libuuid,libuuid-devel,gcc-c++,libtool 194
11.2.2 ZeroMQ和JZMQ 196
11.3 Storm的安装与配置 198
11.3.1 Zookeeper的安装与配置 198
11.3.2 单机模式和集群模式下Storm的安装、配置和启动 200
11.3.3 Storm各节点的服务启动 203
11.4 Storm集群水平扩展工作节点 206
11.5 本章小结 207
第12章 Storm应用的开发与调试 208
12.1 Eclipse环境下的Storm工程 208
12.1.1 Eclipse开发环境 208
12.1.2 将Storm-starter组织为Eclipse工程 210
12.2 Storm应用的开发、调试与部署 212
12.2.1 本地开发与调试 212
12.2.2 远程部署 213
12.3 常见问题与应对技巧 215
12.3.1 ZeroMQ版本 215
12.3.2 Zookeeper日志清理 216
12.3.3 Topology作业的打包与远程部署 216
12.4 本章小结 217
第13章 项目案例分析 218
13.1 业务计算的设计 218
13.1.1 需求分析 218
13.1.2 概要设计 219
13.2 业务计算的实现 220
13.2.1 Topology的构建 220
13.2.2 JmsSpout的实现 222
13.2.3 三个Bolt的实现 224
13.3 本章小结 229
附录 230
参考文献 244
后记 249