第1章 绪论 1
1.1 Storm的基本组件 2
1.1.1 集群组成 2
1.1.2 核心概念 3
1.1.3 Storm的可靠性 5
1.1.4 Storm的特性 6
1.2 其他流式处理框架 6
1.2.1 Apache S4 6
1.2.2 Spark Streaming 6
1.2.3 流计算和Storm的应用 7
第2章 实时平台介绍 11
2.1 实时平台架构介绍 11
2.2 Kafka架构 13
2.2.1 Katka的基本术语和概念 13
2.2.2 Kafka在实时平台中的应用 14
2.2.3 消息的持久化和顺序读写 15
2.2.4 sendfile系统调用和零复制 15
2.2.5 Kafka的客户端 17
2.2.6 Kafka的扩展 17
2.3 大众点评实时平台 17
2.3.1 相关数据 18
2.3.2 实时平台简介 18
2.3.3 Blackhole 19
2.4 1号店实时平台 20
第3章 Storm集群部署和配置 23
3.1 Storm的依赖组件 23
3.2 Storm的部署环境 24
3.3 部署Storm服务 24
3.3.1 部署ZooKeeper 24
3.3.2 部署Storm 25
3.3.3 配置Storm 25
3.4 启动Storm 28
3.5 Storm的守护进程 28
3.6 部署Storm的其他节点 30
3.7 提交Topology 30
第4章 Storm内部剖析 33
4.1 Storm客户端 33
4.2 Nimbus 36
4.2.1 启动Nimbus服务 36
4.2.2 Nimbus服务的执行过程 38
4.2.3 分配Executor 44
4.2.4 调度器 46
4.2.5 默认调度器DefaultScheduler 47
4.2.6 均衡调度器EvenScheduler 50
4.3 Supervisor 53
4.3.1 ISupervisor接口 54
4.3.2 Supervisor的共享数据 54
4.3.3 Supervisor的执行过程 56
4.4 Worker 61
4.4.1 Worker中的数据流 61
4.4.2 创建Worker的过程 62
4.5 Executor 65
4.5.1 Executor的创建 66
4.5.2 创建Spout的Executor 69
4.5.3 创建Bolt的Executor 74
4.6 Task 76
4.6.1 Task的上下文对象 77
4.6.2 Task的创建 82
4.7 Storm中的统计 84
4.7.1 stats框架 85
4.7.2 metric框架 90
4.8 Ack框架 91
4.8.1 Ack的原理 92
4.8.2 Acker Bolt 94
4.9 Storm总体架构 95
第5章 Storm运维和监控 97
5.1 主机信息监控 97
5.2 日志和监控 98
5.3 Storm UI和NimbusClient 99
5.4 Storm Metric的使用 100
5.5 Storm ZooKeeper的目录 102
5.6 Storm Hook的使用 104
第6章 Storm的扩展 107
6.1 Storm UI的扩展 107
6.1.1 Storm UI原生功能 108
6.1.2 Storm UI新功能需求 108
6.1.3 Storm的Thrift接口 109
6.2 资源隔离 110
6.2.1 CGroup测试 111
6.2.2 基于CGroup的资源隔离的实现 119
第7章 Storm开发 121
7.1 简单示例 121
7.2 调试和日志 122
7.3 Storm Trident 124
7.4 Strom DRPC 128
第8章 基于Storm的实时数据平台 129
8.1 Hadoop到Storm的代码迁移经验 129
8.2 实时用户画像 130
8.2.1 简单实时画像 130
8.2.2 实时画像优化 131
8.2.3 实时画像的毫秒级更新 133
8.3 其他场景画像 135
8.4 画像的兴趣度模型构建 136
8.5 外部画像融合经验分享 138
8.6 交互式查询和分析用户画像 142
8.7 实时产品和店铺信息更新 143
第9章 大数据应用案例 145
9.1 实时DAU计算 145
9.2 实时推荐系统 150
9.2.1 推荐系统介绍 150
9.2.2 实时推荐系统的方法 153
9.2.3 基于Storm的实时推荐系统 156
9.3 广告投放的精准化 158
9.3.1 点击率预测 158
9.3.2 搜索引擎营销 161
9.3.3 精准化营销与千人千面 161
9.4 实时意图和搜索 165
9.4.1 用户意图预测 166
9.4.2 搜索比价 168
9.4.3 搜索排序 169
第10章 Storm使用经验和性能优化 170
10.1 使用经验 170
10.1.1 使用rebalance命令动态调整并发度 170
10.1.2 使用tick消息做定时器 172
10.1.3 使用组件的并行度代替线程池 174
10.1.4 不要用DRPC批量处理大数据 174
10.1.5 不要在Spout中处理耗时的操作 174
10.1.6 log4j的使用技巧 175
10.1.7 注意fieldsGrouping的数据均衡性 176
10.1.8 优先使用localorShuffleGrouping 176
10.1.9 设置合理的MaxSpoutPending值 177
10.1.10 设置合理的Worker数 177
10.1.11 平衡吞吐量和时效性 178
10.2 性能优化 179
10.2.1 找到Topology的性能瓶颈 179
10.2.2 GC参数优化 181
10.3 性能优化原则 181
附录A Kafka原理 183
附录B 将Storm源码导入Eclipse 191